kword

KWFrameStyleManager.cpp

00001 /* This file is part of the KDE project
00002    Copyright (C) 2002 Nash Hoogwater <nrhoogwater@wanadoo.nl>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License as published by the Free Software Foundation; using
00007    version 2 of the License.
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., 51 Franklin Street, Fifth Floor,
00017  * Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #include "KWFrameStyleManager.h"
00021 #include "KWFrameStyleManager.moc"
00022 #include "KWImportStyleDia.h"
00023 
00024 #include "KWDocument.h"
00025 #include "KWFrameDia.h" // for KWBrushStylePreview
00026 
00027 #include <KoParagDia.h>
00028 
00029 #include <kcolorbutton.h>
00030 #include <klocale.h>
00031 #include <kiconloader.h>
00032 
00033 #include <qtabwidget.h>
00034 #include <qpushbutton.h>
00035 #include <qlabel.h>
00036 #include <qbrush.h>
00037 #include <qgroupbox.h>
00038 #include <qpainter.h>
00039 #include <qlayout.h>
00040 
00041 /******************************************************************/
00042 /* Class: KWTableStylePreview                                     */
00043 /******************************************************************/
00044 
00045 #undef ptToPx
00046 #define ptToPx qRound
00047 
00048 void KWFrameStylePreview::paintEvent( QPaintEvent * )
00049 {
00050     int wid = ( width() - 20 );
00051     int hei = ( height() - 20 );
00052 
00053     QPainter p;
00054     p.begin( this );
00055 
00056     // 1: create borders
00057     if (frameStyle->topBorder().width()>0) {
00058       p.setPen( KoBorder::borderPen(frameStyle->topBorder(), ptToPx( frameStyle->topBorder().width() ), black) ); // Top border
00059       p.drawLine( 10 - int(frameStyle->leftBorder().width()/2), 10,
00060                   10 + wid + int(frameStyle->rightBorder().width()/2), 10 );
00061     }
00062     if (frameStyle->leftBorder().width()>0) {
00063       p.setPen( KoBorder::borderPen(frameStyle->leftBorder(), ptToPx( frameStyle->leftBorder().width() ), black) ); // Left border
00064       p.drawLine( 10, 10 - int(frameStyle->topBorder().width()/2),
00065                   10 , 10 + hei + int(frameStyle->bottomBorder().width()/2) );
00066     }
00067     if (frameStyle->bottomBorder().width()>0) {
00068       p.setPen( KoBorder::borderPen(frameStyle->bottomBorder(), ptToPx( frameStyle->bottomBorder().width() ), black) ); // Bottom border
00069       p.drawLine( 10 + wid + int(ceil(frameStyle->rightBorder().width()/2)), 10 + hei,
00070                   10 - int(frameStyle->leftBorder().width()/2), 10 + hei );
00071     }
00072     if (frameStyle->rightBorder().width()>0) {
00073       p.setPen( KoBorder::borderPen(frameStyle->rightBorder(), ptToPx( frameStyle->rightBorder().width() ), black) ); // Right border
00074       p.drawLine( 10 + wid, 10 - int(frameStyle->topBorder().width()/2) ,
00075                   10 + wid, 10 + hei + int(frameStyle->bottomBorder().width()/2) );
00076     }
00077 
00078    // 2.1: create background
00079 
00080     p.fillRect( QRect( QPoint(10 + int(ceil(frameStyle->leftBorder().width()/2)), 10 + int(ceil(frameStyle->topBorder().width()/2))),
00081                       QPoint(10 + wid - int(floor(frameStyle->rightBorder().width()/2)+1), 10 + hei - int(floor(frameStyle->bottomBorder().width()/2)+1)) ),
00082                 frameStyle->backgroundColor() );
00083 
00084     p.end();
00085 }
00086 
00087 void KWFrameStylePreview::setFrameStyle( KWFrameStyle *_frameStyle )
00088 {
00089     if (!frameStyle) frameStyle = new KWFrameStyle("preview");
00090 
00091     frameStyle = _frameStyle;
00092 
00093     repaint( true );
00094 }
00095 
00096 /******************************************************************/
00097 /* Class: KWFrameStyleListItem                                    */
00098 /******************************************************************/
00099 
00100 KWFrameStyleListItem::~KWFrameStyleListItem()
00101 {
00102     delete m_changedFrameStyle;
00103 }
00104 
00105 void KWFrameStyleListItem::switchStyle()
00106 {
00107     delete m_changedFrameStyle;
00108     m_changedFrameStyle = 0;
00109 
00110     if ( m_origFrameStyle )
00111         m_changedFrameStyle = new KWFrameStyle( *m_origFrameStyle );
00112 }
00113 
00114 void KWFrameStyleListItem::deleteStyle( KWFrameStyle *current )
00115 {
00116     Q_ASSERT( m_changedFrameStyle == current );
00117     delete m_changedFrameStyle;
00118     m_changedFrameStyle =  0;
00119 }
00120 
00121 void KWFrameStyleListItem::apply()
00122 {
00123     *m_origFrameStyle = *m_changedFrameStyle;
00124 }
00125 
00126 /******************************************************************/
00127 /* Class: KWFrameStyleManager                                     */
00128 /******************************************************************/
00129 
00130 KWFrameStyleManager::KWFrameStyleManager( QWidget *_parent, KWDocument *_doc,
00131                                           const QString & activeStyleName )
00132     : KDialogBase( _parent, "", true,
00133                    i18n("Frame Style Manager"),
00134                    KDialogBase::Ok | KDialogBase::Cancel | KDialogBase::Apply| KDialogBase::User1 )
00135 {
00136     m_doc = _doc;
00137 
00138     m_currentFrameStyle = 0;
00139     noSignals=true;
00140 
00141     m_frameStyles.setAutoDelete(false);
00142 
00143     setupWidget(); // build the widget with the buttons and the list selector.
00144 
00145     addGeneralTab();
00146 
00147     KWFrameStyleBordersTab *bordersTab = new KWFrameStyleBordersTab( m_tabs );
00148     bordersTab->setWidget( new KoParagDecorationWidget( bordersTab ) );
00149     addTab( bordersTab );
00150 
00151     KWFrameStyleBackgroundTab *bgTab = new KWFrameStyleBackgroundTab( m_tabs );
00152     addTab( bgTab );
00153 
00154     QListBoxItem * item = m_stylesList->findItem( activeStyleName );
00155     m_stylesList->setCurrentItem( item ? m_stylesList->index(item) : 0 );
00156 
00157     noSignals=false;
00158     switchStyle();
00159     setInitialSize( QSize( 600, 370 ) );
00160     setButtonText( KDialogBase::User1, i18n("Import From File...") );
00161     connect(this, SIGNAL(user1Clicked()), this, SLOT(importFromFile()));
00162 }
00163 
00164 KWFrameStyleManager::~KWFrameStyleManager()
00165 {
00166     m_frameStyles.setAutoDelete( true );
00167     m_frameStyles.clear();
00168 }
00169 
00170 void KWFrameStyleManager::addTab( KWFrameStyleManagerTab * tab )
00171 {
00172     m_tabsList.append( tab );
00173     m_tabs->insertTab( tab, tab->tabName() );
00174 }
00175 
00176 void KWFrameStyleManager::setupWidget()
00177 {
00178     QFrame * frame1 = makeMainWidget();
00179     QGridLayout *frame1Layout = new QGridLayout( frame1, 0, 0, // auto
00180                                                  0, KDialog::spacingHint() );
00181     KWFrameStyleCollection* collection = m_doc->frameStyleCollection();
00182     numFrameStyles = collection->count();
00183     m_stylesList = new QListBox( frame1, "stylesList" );
00184     m_stylesList->insertStringList( collection->displayNameList() );
00185     const QValueList<KoUserStyle*> styleList = collection->styleList();
00186     for ( QValueList<KoUserStyle *>::const_iterator it = styleList.begin(), end = styleList.end();
00187           it != end ; ++it )
00188     {
00189         KWFrameStyle* style = static_cast<KWFrameStyle *>( *it );
00190         m_frameStyles.append( new KWFrameStyleListItem( style, new KWFrameStyle(*style) ) );
00191         m_styleOrder << style->name();
00192     }
00193     Q_ASSERT( m_stylesList->count() == m_styleOrder.count() );
00194     Q_ASSERT( m_styleOrder.count() == m_frameStyles.count() );
00195 
00196     frame1Layout->addMultiCellWidget( m_stylesList, 0, 0, 0, 1 );
00197 
00198 
00199     m_moveUpButton = new QPushButton( frame1, "moveUpButton" );
00200     m_moveUpButton->setIconSet( SmallIconSet( "up" ) );
00201     connect( m_moveUpButton, SIGNAL( clicked() ), this, SLOT( moveUpStyle() ) );
00202     frame1Layout->addWidget( m_moveUpButton, 1, 1 );
00203 
00204     m_moveDownButton = new QPushButton( frame1, "moveDownButton" );
00205     m_moveDownButton->setIconSet( SmallIconSet( "down" ) );
00206     connect( m_moveDownButton, SIGNAL( clicked() ), this, SLOT( moveDownStyle() ) );
00207     frame1Layout->addWidget( m_moveDownButton, 1, 0 );
00208 
00209 
00210     m_deleteButton = new QPushButton( frame1, "deleteButton" );
00211     m_deleteButton->setText( i18n( "&Delete" ) );
00212     connect( m_deleteButton, SIGNAL( clicked() ), this, SLOT( deleteStyle() ) );
00213 
00214     frame1Layout->addWidget( m_deleteButton, 2, 1 );
00215 
00216     m_newButton = new QPushButton( frame1, "newButton" );
00217     m_newButton->setText( i18n( "New" ) );
00218     connect( m_newButton, SIGNAL( clicked() ), this, SLOT( addStyle() ) );
00219 
00220     frame1Layout->addWidget( m_newButton, 2, 0 );
00221 
00222     m_tabs = new QTabWidget( frame1 );
00223     frame1Layout->addMultiCellWidget( m_tabs, 0, 2, 2, 2 );
00224 
00225     connect( m_stylesList, SIGNAL( selectionChanged() ), this, SLOT( switchStyle() ) );
00226     connect( m_tabs, SIGNAL( currentChanged ( QWidget * ) ), this, SLOT( switchTabs() ) );
00227 }
00228 
00229 void KWFrameStyleManager::addGeneralTab()
00230 {
00231     QWidget *tab = new QWidget( m_tabs );
00232 
00233     QGridLayout *tabLayout = new QGridLayout( tab );
00234     tabLayout->setSpacing( KDialog::spacingHint() );
00235     tabLayout->setMargin( KDialog::marginHint() );
00236 
00237     previewBox = new QGroupBox( 0, Qt::Vertical, i18n( "Preview" ), tab );
00238     previewBox->layout()->setSpacing(KDialog::spacingHint());
00239     previewBox->layout()->setMargin(KDialog::marginHint());
00240     QGridLayout *previewLayout = new QGridLayout( previewBox->layout() );
00241 
00242     preview = new KWFrameStylePreview( previewBox );
00243     preview->resize(preview->sizeHint());
00244 
00245     previewLayout->addWidget( preview, 0, 0 );
00246 
00247     tabLayout->addMultiCellWidget( previewBox, 1, 1, 0, 1 );
00248 
00249     m_nameString = new QLineEdit( tab );
00250     m_nameString->resize(m_nameString->sizeHint() );
00251     connect( m_nameString, SIGNAL( textChanged( const QString &) ), this, SLOT( renameStyle(const QString &) ) );
00252 
00253     tabLayout->addWidget( m_nameString, 0, 1 );
00254 
00255     QLabel *nameLabel = new QLabel( tab );
00256     nameLabel->setText( i18n( "Name:" ) );
00257     nameLabel->resize(nameLabel->sizeHint());
00258     nameLabel->setAlignment( AlignRight | AlignVCenter );
00259 
00260     tabLayout->addWidget( nameLabel, 0, 0 );
00261 
00262     m_tabs->insertTab( tab, i18n( "General" ) );
00263 }
00264 
00265 void KWFrameStyleManager::switchStyle()
00266 {
00267     kdDebug() << "KWFrameStyleManager::switchStyle noSignals=" << noSignals << endl;
00268     if(noSignals) return;
00269     noSignals=true;
00270 
00271     if(m_currentFrameStyle !=0L)
00272         save();
00273 
00274     m_currentFrameStyle = 0L;
00275     int num = frameStyleIndex( m_stylesList->currentItem() );
00276 
00277     kdDebug() << "KWFrameStyleManager::switchStyle switching to " << num << endl;
00278     if( m_frameStyles.at(num)->origFrameStyle() == m_frameStyles.at(num)->changedFrameStyle() )
00279         m_frameStyles.at(num)->switchStyle();
00280     else
00281         m_currentFrameStyle = m_frameStyles.at(num)->changedFrameStyle();
00282 
00283     updateGUI();
00284 
00285     noSignals=false;
00286 }
00287 
00288 void KWFrameStyleManager::switchTabs()
00289 {
00290     save();
00291     updatePreview();
00292 }
00293 
00294 int KWFrameStyleManager::frameStyleIndex( int pos ) {
00295     int p = 0;
00296     for(unsigned int i=0; i < m_frameStyles.count(); i++) {
00297         // Skip deleted styles, they're no in m_stylesList anymore
00298         KWFrameStyle * style = m_frameStyles.at(i)->changedFrameStyle();
00299         if ( !style ) continue;
00300         if ( p == pos )
00301             return i;
00302         ++p;
00303     }
00304     kdWarning() << "KWFrameStyleManager::frameStyleIndex no style found at pos " << pos << " count=" << m_frameStyles.count() << endl;
00305 
00306 #ifdef __GNUC_
00307 #warning implement undo/redo
00308 #endif
00309 
00310     return 0;
00311 }
00312 
00313 void KWFrameStyleManager::updateGUI()
00314 {
00315     kdDebug() << "KWFrameStyleManager::updateGUI m_currentFrameStyle=" << m_currentFrameStyle << " " << m_currentFrameStyle->name() << endl;
00316     QPtrListIterator<KWFrameStyleManagerTab> it( m_tabsList );
00317     for ( ; it.current() ; ++it )
00318     {
00319         it.current()->setStyle( m_currentFrameStyle );
00320         it.current()->update();
00321     }
00322 
00323     m_nameString->setText(m_currentFrameStyle->displayName());
00324 
00325     // update delete button (can't delete first style);
00326     m_deleteButton->setEnabled(m_stylesList->currentItem() != 0);
00327 
00328     m_moveUpButton->setEnabled(m_stylesList->currentItem() != 0);
00329     m_moveDownButton->setEnabled(m_stylesList->currentItem()!=(int)m_stylesList->count()-1);
00330 
00331     updatePreview();
00332 }
00333 
00334 void KWFrameStyleManager::updatePreview()
00335 {
00336     preview->setFrameStyle(m_currentFrameStyle);
00337 }
00338 
00339 void KWFrameStyleManager::save() {
00340     if(m_currentFrameStyle) {
00341         // save changes from UI to object.
00342         QPtrListIterator<KWFrameStyleManagerTab> it( m_tabsList );
00343         for ( ; it.current() ; ++it )
00344             it.current()->save();
00345 
00346         m_currentFrameStyle->setDisplayName( m_nameString->text() );
00347     }
00348 }
00349 
00350 void KWFrameStyleManager::importFromFile()
00351 {
00352     // ## why not just use collection->displayNameList()?
00353     QStringList lst;
00354     for ( int i = 0; i<(int)m_stylesList->count();i++)
00355     {
00356         lst << m_stylesList->text(i);
00357     }
00358 
00359     KWImportFrameTableStyleDia dia( m_doc, lst, KWImportFrameTableStyleDia::frameStyle, this, 0 );
00360     if ( dia.listOfFrameStyleImported().count() > 0 && dia.exec() ) {
00361         addStyles( dia.listOfFrameStyleImported() );
00362     }
00363 }
00364 
00365 void KWFrameStyleManager::addStyles( const QPtrList<KWFrameStyle> &listStyle )
00366 {
00367     save();
00368 
00369     QPtrListIterator<KWFrameStyle> style( listStyle );
00370     for ( ; style.current() ; ++style )
00371     {
00372         noSignals=true;
00373         m_stylesList->insertItem( style.current()->displayName() );
00374         m_frameStyles.append( new KWFrameStyleListItem( 0L,new KWFrameStyle(*style.current())) );
00375         m_styleOrder<<style.current()->name();
00376         noSignals=false;
00377 
00378     }
00379     updateGUI();
00380 }
00381 
00382 void KWFrameStyleManager::addStyle()
00383 {
00384     save();
00385 
00386     QString str = i18n( "New Framestyle Template (%1)" ).arg(numFrameStyles++);
00387     if ( m_currentFrameStyle )
00388     {
00389         m_currentFrameStyle = new KWFrameStyle( *m_currentFrameStyle ); // Create a new style, initializing from the current one
00390         m_currentFrameStyle->setDisplayName( str );
00391         m_currentFrameStyle->setName( m_doc->frameStyleCollection()->generateUniqueName() );
00392     }
00393     else
00394         m_currentFrameStyle = new KWFrameStyle( str );
00395 
00396     noSignals=true;
00397     m_frameStyles.append(new KWFrameStyleListItem(0L,m_currentFrameStyle));
00398     m_stylesList->insertItem( str );
00399     m_styleOrder<< str;
00400     m_stylesList->setCurrentItem( m_stylesList->count() - 1 );
00401     noSignals=false;
00402 
00403     updateGUI();
00404 }
00405 
00406 void KWFrameStyleManager::deleteStyle()
00407 {
00408     unsigned int cur = frameStyleIndex( m_stylesList->currentItem() );
00409     m_styleOrder.remove( m_stylesList->currentText());
00410     if ( !m_frameStyles.at(cur)->origFrameStyle() )
00411         m_frameStyles.take(cur );
00412     else {
00413         m_frameStyles.at( cur )->deleteStyle( m_currentFrameStyle );
00414         m_currentFrameStyle = 0L;
00415     }
00416 
00417     // Adjust GUI
00418     m_stylesList->removeItem(m_stylesList->currentItem());
00419     numFrameStyles--;
00420     m_stylesList->setSelected( m_stylesList->currentItem(), true );
00421 }
00422 
00423 void KWFrameStyleManager::moveUpStyle()
00424 {
00425     if(m_currentFrameStyle !=0L)
00426         save();
00427     unsigned int pos = 0;
00428     QString currentStyleName = m_stylesList->currentText();
00429     if ( currentStyleName.isEmpty() )
00430         return;
00431     int pos2 = m_styleOrder.findIndex( currentStyleName );
00432     if ( pos2 > 0 ) // neither -1 nor 0
00433     {
00434         m_styleOrder.remove( m_styleOrder.at(pos2));
00435         m_styleOrder.insert( m_styleOrder.at(pos2-1), currentStyleName);
00436     }
00437 
00438 
00439     pos=m_stylesList->currentItem();
00440     noSignals=true;
00441     m_stylesList->changeItem( m_stylesList->text ( pos-1 ),pos);
00442 
00443     m_stylesList->changeItem( currentStyleName ,pos-1);
00444 
00445     m_stylesList->setCurrentItem( m_stylesList->currentItem() );
00446     noSignals=false;
00447 
00448     updateGUI();
00449 }
00450 
00451 void KWFrameStyleManager::moveDownStyle()
00452 {
00453     if(m_currentFrameStyle !=0L)
00454         save();
00455     unsigned int pos = 0;
00456     QString currentStyleName=m_stylesList->currentText ();
00457     if ( currentStyleName.isEmpty() )
00458         return;
00459 
00460     int pos2 = m_styleOrder.findIndex( currentStyleName );
00461     if ( pos2 != -1 )
00462     {
00463         m_styleOrder.remove( m_styleOrder.at(pos2));
00464         m_styleOrder.insert( m_styleOrder.at(pos2+1), currentStyleName);
00465     }
00466 
00467     pos=m_stylesList->currentItem();
00468     noSignals=true;
00469     m_stylesList->changeItem( m_stylesList->text ( pos+1 ),pos);
00470     m_stylesList->changeItem( currentStyleName ,pos+1);
00471     m_stylesList->setCurrentItem( m_stylesList->currentItem() );
00472     noSignals=false;
00473 
00474     updateGUI();
00475 }
00476 
00477 void KWFrameStyleManager::slotOk()
00478 {
00479     save();
00480     apply();
00481     KDialogBase::slotOk();
00482 }
00483 
00484 void KWFrameStyleManager::slotApply()
00485 {
00486     save();
00487     apply();
00488     KDialogBase::slotApply();
00489 }
00490 
00491 void KWFrameStyleManager::apply()
00492 {
00493     // ##### missing: undo/redo support
00494     noSignals=true;
00495     for (unsigned int i =0 ; i < m_frameStyles.count() ; i++) {
00496         if(m_frameStyles.at(i)->origFrameStyle() == 0) {           // newly added style
00497 
00498             kdDebug() << "adding new " << m_frameStyles.at(i)->changedFrameStyle()->name() << " (" << i << ")" << endl;
00499 
00500             KWFrameStyle* style = m_doc->frameStyleCollection()->addStyle(m_frameStyles.take(i)->changedFrameStyle());
00501             m_frameStyles.insert( i, new KWFrameStyleListItem(0, style) );
00502 
00503         } else if(m_frameStyles.at(i)->changedFrameStyle() == 0) { // deleted style
00504 
00505             kdDebug() << "deleting orig " << m_frameStyles.at(i)->origFrameStyle()->name() << " (" << i << ")" << endl;
00506 
00507             KWFrameStyle *orig = m_frameStyles.at(i)->origFrameStyle();
00508             m_doc->frameStyleCollection()->removeStyle( orig );
00509 
00510         } else {
00511 
00512             kdDebug() << "update style " << m_frameStyles.at(i)->changedFrameStyle()->name() << " (" << i << ")" << endl;
00513             // TODO check if modified, so that we can do m_doc->setModified(true) only if a style was changed
00514             m_frameStyles.at(i)->apply();
00515         }
00516     }
00517     m_doc->frameStyleCollection()->updateStyleListOrder( m_styleOrder );
00518     m_doc->updateAllFrameStyleLists();
00519     m_doc->setModified( true );
00520     noSignals=false;
00521 }
00522 
00523 void KWFrameStyleManager::renameStyle(const QString &theText) {
00524     if(noSignals) return;
00525     noSignals=true;
00526 
00527     int index = m_stylesList->currentItem();
00528     kdDebug() << "KWFrameStyleManager::renameStyle " << index << " to " << theText << endl;
00529 
00530     // rename only in the GUI, not even in the underlying objects (save() does it).
00531     m_stylesList->changeItem( theText, index );
00532     m_styleOrder[index]=theText;
00533 
00534     // Check how many styles with that name we have now
00535     int synonyms = 0;
00536     for ( uint i = 0; i < m_stylesList->count(); i++ ) {
00537         if ( m_stylesList->text( i ) == m_stylesList->currentText() )
00538             ++synonyms;
00539     }
00540     Q_ASSERT( synonyms > 0 ); // should have found 'index' at least !
00541     noSignals=false;
00542     // Can't close the dialog if two styles have the same name
00543     bool state=!theText.isEmpty() && (synonyms == 1);
00544     enableButtonOK(state );
00545     enableButtonApply(state);
00546     m_deleteButton->setEnabled(state&&(m_stylesList->currentItem() != 0));
00547     m_newButton->setEnabled(state);
00548     m_stylesList->setEnabled( state );
00549     enableButton( KDialogBase::User1, state );
00550 
00551     if ( state )
00552     {
00553         m_moveUpButton->setEnabled(m_stylesList->currentItem() != 0);
00554         m_moveDownButton->setEnabled(m_stylesList->currentItem()!=(int)m_stylesList->count()-1);
00555     }
00556     else
00557     {
00558         m_moveUpButton->setEnabled(false);
00559         m_moveDownButton->setEnabled(false);
00560     }
00561 }
00562 
00563 /******************************************************************/
00564 /* Class: KWFrameStyleBackgroundTab                               */
00565 /******************************************************************/
00566 
00567 KWFrameStyleBackgroundTab::KWFrameStyleBackgroundTab( QWidget * parent )
00568     : KWFrameStyleManagerTab( parent )
00569 {
00570     bgwidget = this;
00571     m_backgroundColor.setStyle( SolidPattern );
00572 
00573     grid = new QGridLayout( bgwidget, 7, 2, KDialog::marginHint(), KDialog::spacingHint() );
00574 
00575     int row=0;
00576 
00577     brushPreview = new KWBrushStylePreview( bgwidget );
00578     grid->addMultiCellWidget(brushPreview,row,5,1,1);
00579 
00580     QLabel *l = new QLabel( i18n( "Frame background color:" ), bgwidget );
00581 
00582     grid->addWidget(l,row++,0);
00583 
00584     brushColor = new KColorButton( Qt::white, bgwidget );
00585     grid->addWidget(brushColor,row++,0);
00586 
00587     connect( brushColor, SIGNAL( changed( const QColor & ) ),
00588              this, SLOT( updateBrushConfiguration( const QColor & ) ) );
00589 
00590     QSpacerItem* spacer = new QSpacerItem( 10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding);
00591     grid->addItem( spacer,row,0 );
00592 
00593     updateBrushConfiguration( Qt::white );
00594 }
00595 
00596 void KWFrameStyleBackgroundTab::updateBrushConfiguration( const QColor & _color )
00597 {
00598     m_backgroundColor.setColor( _color );
00599     brushPreview->show();
00600     brushPreview->setBrush( m_backgroundColor );
00601     brushPreview->repaint(true);
00602 }
00603 
00604 QString KWFrameStyleBackgroundTab::tabName()
00605 {
00606     return i18n("Background");
00607 }
00608 
00609 void KWFrameStyleBackgroundTab::update()
00610 {
00611     brushColor->setColor( m_style->backgroundColor().color() );
00612     updateBrushConfiguration( m_style->backgroundColor().color() );
00613 }
00614 
00615 void KWFrameStyleBackgroundTab::save()
00616 {
00617     m_style->setBackgroundColor( m_backgroundColor );
00618 }
00619 
00620 /******************************************************************/
00621 /* Class: KWFrameStyleBordersTab                                  */
00622 /******************************************************************/
00623 
00624 KWFrameStyleBordersTab::KWFrameStyleBordersTab( QWidget * parent )
00625     : KWFrameStyleManagerTab( parent )
00626 {
00627     m_widget = 0L;
00628     m_borders = new KoParagLayout();
00629 }
00630 
00631 KWFrameStyleBordersTab::~KWFrameStyleBordersTab()
00632 {
00633     delete m_borders;
00634 }
00635 
00636 QString KWFrameStyleBordersTab::tabName()
00637 {
00638     return m_widget->tabName();
00639 }
00640 
00641 void KWFrameStyleBordersTab::update()
00642 {
00643     m_borders->leftBorder = m_style->leftBorder();
00644     m_borders->rightBorder = m_style->rightBorder();
00645     m_borders->topBorder = m_style->topBorder();
00646     m_borders->bottomBorder = m_style->bottomBorder();
00647 
00648 
00649     m_widget->display( *m_borders );
00650 }
00651 
00652 void KWFrameStyleBordersTab::save()
00653 {
00654     m_widget->save( *m_borders );
00655     m_style->setLeftBorder( m_borders->leftBorder );
00656     m_style->setRightBorder( m_borders->rightBorder );
00657     m_style->setTopBorder( m_borders->topBorder );
00658     m_style->setBottomBorder( m_borders->bottomBorder );
00659 }
00660 
00661 void KWFrameStyleBordersTab::setWidget( KoParagLayoutWidget * widget )
00662 {
00663     m_widget = widget;
00664 }
00665 
00666 void KWFrameStyleBordersTab::resizeEvent( QResizeEvent *e )
00667 {
00668     QWidget::resizeEvent( e );
00669     if ( m_widget ) m_widget->resize( size() );
00670 }
00671 
KDE Home | KDE Accessibility Home | Description of Access Keys