00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "KWTableTemplateSelector.h"
00021 #include "KWTableTemplateSelector.moc"
00022
00023 #include "KWTableTemplate.h"
00024 #include "KWTableFrameSet.h"
00025 #include "KWDocument.h"
00026 #include "KWTextDocument.h"
00027
00028 #include <KoRect.h>
00029
00030 #include <klocale.h>
00031 #include <kurl.h>
00032 #include <kio/netaccess.h>
00033 #include <kstandarddirs.h>
00034 #include <kdebug.h>
00035
00036 #include <qlabel.h>
00037 #include <qbuttongroup.h>
00038 #include <qcheckbox.h>
00039 #include <qcombobox.h>
00040 #include <qfile.h>
00041 #include <qdom.h>
00042 #include <qrect.h>
00043 #include <qptrlist.h>
00044 #include <qlayout.h>
00045
00046 #include <stdlib.h>
00047 #include <math.h>
00048
00049
00050
00051
00052
00053 KWTableTemplatePreview::KWTableTemplatePreview( const QString& title, KWTableStyle *_emptyStyle, QWidget* parent, const char* name )
00054 : QGroupBox( title, parent, name )
00055 {
00056 m_emptyStyle = _emptyStyle;
00057 m_zoomHandler = new KoTextZoomHandler;
00058 m_textdoc = new KWTextDocument( m_zoomHandler );
00059 tableTemplate = 0L;
00060 origTableTemplate = 0L;
00061 m_disableRepaint = false;
00062 fillContents();
00063 }
00064
00065 KWTableTemplatePreview::~KWTableTemplatePreview()
00066 {
00067
00068 delete m_textdoc;
00069 delete m_zoomHandler;
00070
00071
00072
00073
00074 }
00075
00076 int KWTableTemplatePreview::bottomBorder(const int rows, const int cols, const int rowpos, const int colpos)
00077 {
00078 if ( (rowpos<0) || (colpos<0) ) return 0;
00079
00080 if ( (rowpos==0) && (colpos==0) )
00081 return int( tableTemplate->pTopLeftCorner()->frameStyle()->bottomBorder().width() );
00082 else
00083 if ( (rowpos==0) && ( colpos==(cols-1) ) )
00084 return int( tableTemplate->pTopRightCorner()->frameStyle()->bottomBorder().width() );
00085 else
00086 if ( ( rowpos==(rows-1) ) && (colpos==0) )
00087 return int( tableTemplate->pBottomLeftCorner()->frameStyle()->bottomBorder().width() );
00088 else
00089 if ( ( rowpos==(rows-1) ) && ( colpos==(cols-1) ) )
00090 return int( tableTemplate->pBottomRightCorner()->frameStyle()->bottomBorder().width() );
00091 else
00092 if ( ( rowpos==0 ) && ( colpos>0 ) && ( colpos<(cols-1) ) )
00093 return int( tableTemplate->pFirstRow()->frameStyle()->bottomBorder().width() );
00094 else
00095 if ( ( colpos==0 ) && ( rowpos>0 ) && ( rowpos<(rows-1) ) )
00096 return int( tableTemplate->pFirstCol()->frameStyle()->bottomBorder().width() );
00097 else
00098 if ( ( rowpos==(rows-1) ) && ( colpos>0 ) && ( colpos<(cols-1) ) )
00099 return int( tableTemplate->pLastRow()->frameStyle()->bottomBorder().width() );
00100 else
00101 if ( ( colpos==(cols-1) ) && ( rowpos>0 ) && ( rowpos<(rows-1) ) )
00102 return int( tableTemplate->pLastCol()->frameStyle()->bottomBorder().width() );
00103 else
00104 if ( (rowpos>0) && (colpos>0) && (rowpos<(rows-1)) && (colpos<(cols-1)) )
00105 return int( tableTemplate->pBodyCell()->frameStyle()->bottomBorder().width() );
00106
00107 return 0;
00108 }
00109
00110 int KWTableTemplatePreview::rightBorder(const int rows, const int cols, const int rowpos, const int colpos)
00111 {
00112 if ( (rowpos<0) || (colpos<0) ) return 0;
00113
00114 if ( (rowpos==0) && (colpos==0) )
00115 return int( tableTemplate->pTopLeftCorner()->frameStyle()->rightBorder().width() );
00116 else
00117 if ( (rowpos==0) && ( colpos==(cols-1) ) )
00118 return int( tableTemplate->pTopRightCorner()->frameStyle()->rightBorder().width() );
00119 else
00120 if ( ( rowpos==(rows-1) ) && (colpos==0) )
00121 return int( tableTemplate->pBottomLeftCorner()->frameStyle()->rightBorder().width() );
00122 else
00123 if ( ( rowpos==(rows-1) ) && ( colpos==(cols-1) ) )
00124 return int( tableTemplate->pBottomRightCorner()->frameStyle()->rightBorder().width() );
00125 else
00126 if ( ( rowpos==0 ) && ( colpos>0 ) && ( colpos<(cols-1) ) )
00127 return int( tableTemplate->pFirstRow()->frameStyle()->rightBorder().width() );
00128 else
00129 if ( ( colpos==0 ) && ( rowpos>0 ) && ( rowpos<(rows-1) ) )
00130 return int( tableTemplate->pFirstCol()->frameStyle()->rightBorder().width() );
00131 else
00132 if ( ( rowpos==(rows-1) ) && ( colpos>0 ) && ( colpos<(cols-1) ) )
00133 return int( tableTemplate->pLastRow()->frameStyle()->rightBorder().width() );
00134 else
00135 if ( ( colpos==(cols-1) ) && ( rowpos>0 ) && ( rowpos<(rows-1) ) )
00136 return int( tableTemplate->pLastCol()->frameStyle()->rightBorder().width() );
00137 else
00138 if ( (rowpos>0) && (colpos>0) && (rowpos<(rows-1)) && (colpos<(cols-1)) )
00139 return int( tableTemplate->pBodyCell()->frameStyle()->rightBorder().width() );
00140
00141 return 0;
00142 }
00143
00144 void KWTableTemplatePreview::drawCell( QPainter *p, const KWTableStyle *ts, const QRect globalRect,
00145 const int rows, int cols, int rowpos, int colpos, const QString & txt)
00146 {
00147 if (!ts) return;
00148
00149 QRect insRect;
00150
00151 p->resetXForm();
00152 p->setClipping( false );
00153
00154
00155 int wid = int( globalRect.width()/cols );
00156 int hei = int( globalRect.height()/rows );
00157
00158 insRect.setX( colpos*wid + globalRect.x() );
00159 insRect.setY( rowpos*hei + globalRect.y() );
00160 insRect.setWidth( static_cast<int>(wid + ts->frameStyle()->rightBorder().width()) );
00161 insRect.setHeight( static_cast<int>(hei + ts->frameStyle()->bottomBorder().width()) );
00162
00163
00164
00165 int rb = rightBorder(rows,cols,rowpos,colpos-1);
00166 int bb = bottomBorder(rows,cols,rowpos-1,colpos);
00167 int hbb = bottomBorder(rows,cols,rowpos,colpos-1);
00168 int wrb = rightBorder(rows,cols,rowpos-1,colpos);
00169
00170 if (rb==0)
00171 rb = rightBorder(rows,cols,rowpos-1,colpos-1);
00172 if (bb==0)
00173 bb = bottomBorder(rows,cols,rowpos-1,colpos-1);
00174
00175 p->fillRect( QRect( colpos*wid + globalRect.x() + ( (rb <= ts->frameStyle()->rightBorder().width()) ? int(ts->frameStyle()->rightBorder().width()) : rb ),
00176 rowpos*hei + globalRect.y() + ( (bb <= ts->frameStyle()->topBorder().width()) ? int(ts->frameStyle()->topBorder().width()) : bb ),
00177 wid + ( ( (wrb > ts->frameStyle()->rightBorder().width()) && ((rb > ts->frameStyle()->rightBorder().width()) || ((rb==0) && (ts->frameStyle()->rightBorder().width()==0) ) ) && ((wrb-rb)>0) ) ? wrb : 0 ),
00178 hei + ( ( (hbb > ts->frameStyle()->bottomBorder().width()) && ((bb > ts->frameStyle()->topBorder().width()) || ((bb==0) && (ts->frameStyle()->topBorder().width()==0) ) ) && ((hbb-bb)>0) ) ? hbb : 0 )),
00179 ts->frameStyle()->backgroundColor() );
00180
00181
00182 KoTextParag * parag = m_textdoc->firstParag();
00183
00184 parag->remove( 0, parag->string()->length()-1 );
00185 parag->insert( 0, txt );
00186 parag->applyStyle( ts->paragraphStyle() );
00187
00188 int widthLU = m_zoomHandler->pixelToLayoutUnitX( wid - 2 );
00189 if ( m_textdoc->width() != widthLU )
00190 {
00191
00192 m_textdoc->setWidth( widthLU );
00193 parag->invalidate(0);
00194 }
00195 double x_add = ( (rb < ts->frameStyle()->rightBorder().width()) ?
00196 ts->frameStyle()->rightBorder().width() : rb ) +1;
00197 double y_add = ( (bb < ts->frameStyle()->topBorder().width()) ?
00198 ts->frameStyle()->topBorder().width() : bb ) + 1;
00199
00200 QRect textRect = parag->pixelRect( m_zoomHandler );
00201 textRect.moveTopLeft( QPoint( insRect.x() + static_cast<int>(x_add),
00202 insRect.y() + static_cast<int>(y_add)) );
00203
00204
00205 textRect.setWidth(wid-2);
00206
00207 p->setClipRect( textRect.intersect( globalRect ) );
00208 p->translate( textRect.x(), textRect.y() );
00209
00210 QColorGroup cg = QApplication::palette().active();
00211 cg.setBrush( QColorGroup::Base, ts->frameStyle()->backgroundColor() );
00212
00213 m_textdoc->drawWYSIWYG( p, 1, 0, textRect.width() - 1, textRect.height(), cg, m_zoomHandler );
00214
00215
00216 p->resetXForm();
00217 p->setClipping( false );
00218
00219 QRect cell(globalRect.x(), globalRect.y(),
00220 int( globalRect.width() + ts->frameStyle()->rightBorder().width() ),
00221 int( globalRect.height() + ts->frameStyle()->bottomBorder().width() ));
00222 p->setClipRect( insRect.intersect( cell ) );
00223
00224 p->translate( insRect.x(), insRect.y() );
00225
00226 if (ts->frameStyle()->topBorder().width()>0) {
00227 p->setPen( KoBorder::borderPen(ts->frameStyle()->topBorder(),
00228 int(ts->frameStyle()->topBorder().width()), black) );
00229
00230 p->drawLine( 0, int( floor( ts->frameStyle()->topBorder().width()/2 ) ),
00231 int(wid + ts->frameStyle()->rightBorder().width()), int( floor( ts->frameStyle()->topBorder().width()/2 ) ) );
00232 }
00233 if (ts->frameStyle()->leftBorder().width()>0) {
00234 p->setPen( KoBorder::borderPen(ts->frameStyle()->leftBorder(),
00235 int(ts->frameStyle()->leftBorder().width()), black) );
00236
00237 p->drawLine( int( floor( ts->frameStyle()->leftBorder().width()/2 ) ), 0,
00238 int( floor( ts->frameStyle()->leftBorder().width()/2 ) ), hei + int(ts->frameStyle()->bottomBorder().width()) );
00239 }
00240 if (ts->frameStyle()->bottomBorder().width()>0) {
00241 p->setPen( KoBorder::borderPen(ts->frameStyle()->bottomBorder(),
00242 int(ts->frameStyle()->bottomBorder().width()), black) );
00243
00244 p->drawLine( 0, hei+int( floor( ts->frameStyle()->bottomBorder().width()/2 ) ),
00245 int(wid + ts->frameStyle()->rightBorder().width()), hei + int( floor( ts->frameStyle()->bottomBorder().width()/2 ) ) );
00246 }
00247 if (ts->frameStyle()->rightBorder().width()>0) {
00248 p->setPen( KoBorder::borderPen(ts->frameStyle()->rightBorder(),
00249 int(ts->frameStyle()->rightBorder().width()), black) );
00250
00251 p->drawLine( wid + int( floor( ts->frameStyle()->rightBorder().width()/2 ) ), 0,
00252 wid + int( floor( ts->frameStyle()->rightBorder().width()/2 ) ), hei + int(ts->frameStyle()->bottomBorder().width()) );
00253 }
00254 }
00255
00256
00257 void KWTableTemplatePreview::drawPreviewTable( QPainter *p, int rows, int cols, QRect globalRect )
00258 {
00259 KWTableStyle *cell = 0L;
00260 QString txt;
00261
00262 for ( int i = 0; i < rows; i++ )
00263 {
00264 for ( int j = 0; j < cols; j++ )
00265 {
00266 if ( (i==0) && (j==0) )
00267 cell = tableTemplate->pTopLeftCorner();
00268 else
00269 if ( (i==0) && ( j==(cols-1) ) )
00270 cell = tableTemplate->pTopRightCorner();
00271 else
00272 if ( ( i==(rows-1) ) && (j==0) )
00273 cell = tableTemplate->pBottomLeftCorner();
00274 else
00275 if ( ( i==(rows-1) ) && ( j==(cols-1) ) )
00276 cell = tableTemplate->pBottomRightCorner();
00277 else
00278 if ( ( i==0 ) && ( j>0 ) && ( j<(cols-1) ) )
00279 cell = tableTemplate->pFirstRow();
00280 else
00281 if ( ( j==0 ) && ( i>0 ) && ( i<(rows-1) ) )
00282 cell = tableTemplate->pFirstCol();
00283 else
00284 if ( ( i==(rows-1) ) && ( j>0 ) && ( j<(cols-1) ) )
00285 cell = tableTemplate->pLastRow();
00286 else
00287 if ( ( j==(cols-1) ) && ( i>0 ) && ( i<(rows-1) ) )
00288 cell = tableTemplate->pLastCol();
00289 else
00290 if ( (i>0) && (j>0) && (i<(rows-1)) && (j<(cols-1)) )
00291 cell = tableTemplate->pBodyCell();
00292
00293 if ( (i==0) && (j==0) )
00294 txt = m_contents[0][0];
00295 else
00296 if ( ( i==0 ) && ( j>0 ) )
00297 txt = m_contents[i][j];
00298 else
00299 if ( ( j==0 ) && ( i>0 ) )
00300 txt = m_contents[1][i];
00301 else
00302 txt = QString::number(i) + QString::number(j);
00303
00304 drawCell( p, cell, globalRect, rows, cols, i, j, txt );
00305 }
00306 }
00307 }
00308
00309 void KWTableTemplatePreview::drawContents( QPainter *p )
00310 {
00311 p->save();
00312 QRect r = contentsRect();
00313
00314
00315 p->fillRect( QRect( 10, 20, r.width() - 20, r.height() - 20 ), QColor("white") );
00316
00317
00318 if (tableTemplate) {
00319
00320 QRect tableRect;
00321 int x,y;
00322
00323
00324 if ( tableTemplate->pTopRightCorner()->frameStyle()->rightBorder().width() >
00325 tableTemplate->pLastCol()->frameStyle()->rightBorder().width() )
00326 x = int( tableTemplate->pTopRightCorner()->frameStyle()->rightBorder().width() );
00327 else
00328 x = int( tableTemplate->pLastCol()->frameStyle()->rightBorder().width() );
00329 if ( tableTemplate->pBottomRightCorner()->frameStyle()->rightBorder().width() > x )
00330 x = int( tableTemplate->pBottomRightCorner()->frameStyle()->rightBorder().width() );
00331
00332
00333 if ( tableTemplate->pBottomRightCorner()->frameStyle()->bottomBorder().width() >
00334 tableTemplate->pLastRow()->frameStyle()->bottomBorder().width() )
00335 y = int( tableTemplate->pBottomRightCorner()->frameStyle()->bottomBorder().width() );
00336 else
00337 y = int( tableTemplate->pLastRow()->frameStyle()->bottomBorder().width() );
00338 if ( tableTemplate->pBottomLeftCorner()->frameStyle()->bottomBorder().width() > y )
00339 y = int( tableTemplate->pBottomLeftCorner()->frameStyle()->leftBorder().width() );
00340
00341 tableRect.setX( 20 - int(x/2) );
00342 tableRect.setY( 30 - int(y/2) );
00343 tableRect.setWidth( r.width() - 40 );
00344 tableRect.setHeight( r.height() - 40 );
00345
00346 drawPreviewTable( p, 5, 4, tableRect );
00347 }
00348
00349 p->restore();
00350 }
00351
00352 void KWTableTemplatePreview::setSpecialCells( KWTableTemplate *_tableTemplate )
00353 {
00354 if (_tableTemplate->pFirstRow()==_tableTemplate->pBodyCell())
00355 tableTemplate->setFirstRow( tableTemplate->pBodyCell() );
00356 else
00357 tableTemplate->setFirstRow( _tableTemplate->pFirstRow() );
00358
00359 if (_tableTemplate->pFirstCol()==_tableTemplate->pBodyCell())
00360 tableTemplate->setFirstCol( tableTemplate->pBodyCell() );
00361 else
00362 tableTemplate->setFirstCol( _tableTemplate->pFirstCol() );
00363
00364 if (_tableTemplate->pLastRow()==_tableTemplate->pBodyCell())
00365 tableTemplate->setLastRow( tableTemplate->pBodyCell() );
00366 else
00367 tableTemplate->setLastRow( _tableTemplate->pLastRow() );
00368
00369 if (_tableTemplate->pLastCol()==_tableTemplate->pBodyCell())
00370 tableTemplate->setLastCol( tableTemplate->pBodyCell() );
00371 else
00372 tableTemplate->setLastCol( _tableTemplate->pLastCol() );
00373
00374 if (_tableTemplate->pTopLeftCorner()==_tableTemplate->pBodyCell())
00375 tableTemplate->setTopLeftCorner( tableTemplate->pBodyCell() );
00376 else
00377 tableTemplate->setTopLeftCorner( _tableTemplate->pTopLeftCorner() );
00378
00379 if (_tableTemplate->pTopRightCorner()==_tableTemplate->pBodyCell())
00380 tableTemplate->setTopRightCorner( tableTemplate->pBodyCell() );
00381 else
00382 tableTemplate->setTopRightCorner( _tableTemplate->pTopRightCorner() );
00383
00384 if (_tableTemplate->pBottomLeftCorner()==_tableTemplate->pBodyCell())
00385 tableTemplate->setBottomLeftCorner( tableTemplate->pBodyCell() );
00386 else
00387 tableTemplate->setBottomLeftCorner( _tableTemplate->pBottomLeftCorner() );
00388
00389 if (_tableTemplate->pBottomRightCorner()==_tableTemplate->pBodyCell())
00390 tableTemplate->setBottomRightCorner( tableTemplate->pBodyCell() );
00391 else
00392 tableTemplate->setBottomRightCorner( _tableTemplate->pBottomRightCorner() );
00393 }
00394
00395 void KWTableTemplatePreview::setTableTemplate( KWTableTemplate *_tableTemplate )
00396 {
00397 origTableTemplate = _tableTemplate;
00398
00399 delete tableTemplate;
00400
00401 tableTemplate = new KWTableTemplate(_tableTemplate->displayName());
00402 tableTemplate->setBodyCell( _tableTemplate->pBodyCell() );
00403
00404 setSpecialCells(_tableTemplate);
00405
00406 repaint( true );
00407 }
00408
00409 void KWTableTemplatePreview::fillContents()
00410 {
00411
00412 m_contents[0][0] = "A";
00413 m_contents[0][1] = "B";
00414 m_contents[0][2] = "C";
00415 m_contents[0][3] = "D";
00416 m_contents[0][4] = "E";
00417
00418 m_contents[1][0] = "";
00419 m_contents[1][1] = "I";
00420 m_contents[1][2] = "II";
00421 m_contents[1][3] = "III";
00422 m_contents[1][4] = "IV";
00423
00424 }
00425
00426 KWTableTemplate* KWTableTemplatePreview::getTableTemplate() const
00427 {
00428 return tableTemplate;
00429 }
00430
00431 void KWTableTemplatePreview::cbFirstRowChanged( bool enable )
00432 {
00433 if ( enable && (origTableTemplate->pFirstRow()!=origTableTemplate->pBodyCell()) )
00434 tableTemplate->setFirstRow( origTableTemplate->pFirstRow() );
00435 else
00436 tableTemplate->setFirstRow( tableTemplate->pBodyCell() );
00437
00438 if ( enable && ( origTableTemplate->pTopLeftCorner()==origTableTemplate->pFirstRow() ) )
00439 tableTemplate->setTopLeftCorner( origTableTemplate->pTopLeftCorner() );
00440 else
00441 if ( (!enable) && ( origTableTemplate->pTopLeftCorner()==origTableTemplate->pFirstRow() ) )
00442 tableTemplate->setTopLeftCorner( tableTemplate->pBodyCell() );
00443
00444 if ( enable && ( origTableTemplate->pTopRightCorner()==origTableTemplate->pFirstRow() ) )
00445 tableTemplate->setTopRightCorner( origTableTemplate->pTopRightCorner() );
00446 else
00447 if ( (!enable) && ( origTableTemplate->pTopRightCorner()==origTableTemplate->pFirstRow() ) )
00448 tableTemplate->setTopRightCorner( tableTemplate->pBodyCell() );
00449 if ( !m_disableRepaint )
00450 repaint( true );
00451 }
00452
00453 void KWTableTemplatePreview::cbFirstColChanged( bool enable )
00454 {
00455 if ( enable && (origTableTemplate->pFirstCol()!=origTableTemplate->pBodyCell()) )
00456 tableTemplate->setFirstCol( origTableTemplate->pFirstCol() );
00457 else
00458 tableTemplate->setFirstCol( tableTemplate->pBodyCell() );
00459
00460 if ( enable && ( origTableTemplate->pTopLeftCorner()==origTableTemplate->pFirstCol() ) )
00461 tableTemplate->setTopLeftCorner( origTableTemplate->pTopLeftCorner() );
00462 else
00463 if ( (!enable) && ( origTableTemplate->pTopLeftCorner()==origTableTemplate->pFirstCol() ) )
00464 tableTemplate->setTopLeftCorner( tableTemplate->pBodyCell() );
00465
00466 if ( enable && ( origTableTemplate->pBottomLeftCorner()==origTableTemplate->pFirstCol() ) )
00467 tableTemplate->setBottomLeftCorner( origTableTemplate->pBottomLeftCorner() );
00468 else
00469 if ( (!enable) && ( origTableTemplate->pBottomLeftCorner()==origTableTemplate->pFirstCol() ) )
00470 tableTemplate->setBottomLeftCorner( tableTemplate->pBodyCell() );
00471
00472 if ( !m_disableRepaint )
00473 repaint( true );
00474 }
00475
00476 void KWTableTemplatePreview::cbLastRowChanged( bool enable )
00477 {
00478 if ( enable && (origTableTemplate->pLastRow()!=origTableTemplate->pBodyCell()) )
00479 tableTemplate->setLastRow( origTableTemplate->pLastRow() );
00480 else
00481 tableTemplate->setLastRow( tableTemplate->pBodyCell() );
00482
00483 if ( enable && ( origTableTemplate->pBottomRightCorner()==origTableTemplate->pLastRow() ) )
00484 tableTemplate->setBottomRightCorner( origTableTemplate->pBottomRightCorner() );
00485 else
00486 if ( (!enable) && ( origTableTemplate->pBottomRightCorner()==origTableTemplate->pLastRow() ) )
00487 tableTemplate->setBottomRightCorner( tableTemplate->pBodyCell() );
00488
00489 if ( enable && ( origTableTemplate->pBottomLeftCorner()==origTableTemplate->pLastRow() ) )
00490 tableTemplate->setBottomLeftCorner( origTableTemplate->pBottomLeftCorner() );
00491 else
00492 if ( (!enable) && ( origTableTemplate->pBottomLeftCorner()==origTableTemplate->pLastRow() ) )
00493 tableTemplate->setBottomLeftCorner( tableTemplate->pBodyCell() );
00494
00495 if ( !m_disableRepaint )
00496 repaint( true );
00497 }
00498
00499 void KWTableTemplatePreview::cbLastColChanged( bool enable )
00500 {
00501 if ( enable && (origTableTemplate->pLastCol()!=origTableTemplate->pBodyCell()) )
00502 tableTemplate->setLastCol( origTableTemplate->pLastCol() );
00503 else
00504 tableTemplate->setLastCol( tableTemplate->pBodyCell() );
00505
00506 if ( enable && ( origTableTemplate->pTopRightCorner()==origTableTemplate->pLastCol() ) )
00507 tableTemplate->setTopRightCorner( origTableTemplate->pTopRightCorner() );
00508 else
00509 if ( (!enable) && ( origTableTemplate->pTopRightCorner()==origTableTemplate->pLastCol() ) )
00510 tableTemplate->setTopRightCorner( tableTemplate->pBodyCell() );
00511
00512 if ( enable && ( origTableTemplate->pBottomRightCorner()==origTableTemplate->pLastCol() ) )
00513 tableTemplate->setBottomRightCorner( origTableTemplate->pBottomRightCorner() );
00514 else
00515 if ( (!enable) && ( origTableTemplate->pBottomRightCorner()==origTableTemplate->pLastCol() ) )
00516 tableTemplate->setBottomRightCorner( tableTemplate->pBodyCell() );
00517
00518 if ( !m_disableRepaint )
00519 repaint( true );
00520 }
00521
00522 void KWTableTemplatePreview::cbBodyChanged( bool enable )
00523 {
00524 KWTableTemplate *oldTemplate = new KWTableTemplate( *tableTemplate );
00525
00526 if ( enable )
00527 tableTemplate->setBodyCell( origTableTemplate->pBodyCell() );
00528 else
00529 tableTemplate->setBodyCell( m_emptyStyle );
00530
00531 setSpecialCells(oldTemplate);
00532
00533 delete oldTemplate;
00534
00535 if ( !m_disableRepaint )
00536 repaint( true );
00537
00538 }
00539
00540
00541
00542
00543
00544
00545 KWTableTemplateSelector::KWTableTemplateSelector( KWDocument *_doc, QWidget *_parent, const QString & _tableTemplate, int _type,const char *_name)
00546 : QWidget( _parent, _name )
00547 {
00548 m_doc = _doc;
00549
00550 QGridLayout *grid = new QGridLayout( this, 3, 2, 0, KDialog::spacingHint() );
00551
00552 QWidget *innerHolder = new QWidget( this );
00553 QGridLayout *innerGrid = new QGridLayout( innerHolder, 2, 1, 0, KDialog::spacingHint() );
00554
00555 lbTemplates = new QListBox( innerHolder );
00556
00557 QPtrListIterator<KWTableTemplate> it( m_doc->tableTemplateCollection()->tableTemplateList() );
00558 for ( ; it.current() ; ++it )
00559 {
00560 lbTemplates->insertItem( it.current()->displayName() );
00561 }
00562
00563 innerGrid->addWidget( lbTemplates, 0, 0 );
00564
00565 pbCustomize = new QPushButton( i18n( "&Customize" ), innerHolder );
00566 pbCustomize->setEnabled(false);
00567 pbCustomize->hide();
00568 innerGrid->addWidget( pbCustomize, 1, 0 );
00569
00570 grid->addMultiCellWidget( innerHolder, 0, 2, 0, 0 );
00571
00572 preview = new KWTableTemplatePreview( i18n( "Preview" ), m_doc->tableStyleCollection()->findStyle("Plain"), this );
00573 grid->addWidget( preview, 0, 1 );
00574
00575 bgCustomize = new QButtonGroup( 3, Horizontal, i18n( "Apply To" ), this );
00576
00577 cbFirstRow = new QCheckBox( i18n( "First row" ), bgCustomize );
00578 cbLastRow = new QCheckBox( i18n( "Last row" ), bgCustomize );
00579 cbBody = new QCheckBox( i18n( "Body" ), bgCustomize );
00580 cbFirstCol = new QCheckBox( i18n( "First column" ), bgCustomize );
00581 cbLastCol = new QCheckBox( i18n( "Last column" ), bgCustomize );
00582
00583 grid->addWidget( bgCustomize, 1, 1 );
00584
00585 grid->setRowStretch( 0, 1 );
00586 grid->setRowStretch( 1, 0 );
00587 grid->addColSpacing( 0, innerHolder->width() );
00588 grid->setColStretch( 0, 0 );
00589 grid->setColStretch( 1, 1 );
00590 grid->activate();
00591
00592 connect( cbFirstRow, SIGNAL( toggled( bool ) ), preview, SLOT( cbFirstRowChanged( bool ) ) );
00593 connect( cbFirstCol, SIGNAL( toggled( bool ) ), preview, SLOT( cbFirstColChanged( bool ) ) );
00594 connect( cbLastRow, SIGNAL( toggled( bool ) ), preview, SLOT( cbLastRowChanged( bool ) ) );
00595 connect( cbLastCol, SIGNAL( toggled( bool ) ), preview, SLOT( cbLastColChanged( bool ) ) );
00596 connect( cbBody, SIGNAL( toggled( bool ) ), preview, SLOT( cbBodyChanged( bool ) ) );
00597
00598 connect( lbTemplates, SIGNAL( selectionChanged () ), this, SLOT( changeTableTemplate() ) );
00599 QListBoxItem * item = lbTemplates->findItem( _tableTemplate );
00600 int index = 0;
00601 if ( item )
00602 index = lbTemplates->index ( item );
00603 if (m_doc->tableTemplateCollection()->tableTemplateList().count() > 0) {
00604 preview->setTableTemplate( m_doc->tableTemplateCollection()->tableTemplateAt(index) );
00605 selectedTableTemplate = 0L;
00606 lbTemplates->setSelected( index, true );
00607 }
00608 initFormat( _type );
00609 }
00610
00611 void KWTableTemplateSelector::changeTableTemplate()
00612 {
00613 preview->setTableTemplate( m_doc->tableTemplateCollection()->tableTemplateAt( lbTemplates->currentItem() ) );
00614 selectedTableTemplate = lbTemplates->currentItem();
00615 initPreview();
00616 }
00617
00618 KWTableTemplate* KWTableTemplateSelector::getTableTemplate() const
00619 {
00620 return (selectedTableTemplate) ? preview->getTableTemplate() : 0L;
00621 }
00622
00623 void KWTableTemplateSelector::initFormat( int format)
00624 {
00625 if ( format & FirstRow)
00626 cbFirstRow->setChecked( true );
00627
00628 if ( format & FirstColumn)
00629 cbFirstCol->setChecked( true );
00630
00631 if ( format & LastRow)
00632 cbLastRow->setChecked( true );
00633
00634 if ( format & LastCol)
00635 cbLastCol->setChecked( true );
00636
00637 if ( format & Body)
00638 cbBody->setChecked( true );
00639 initPreview();
00640 }
00641
00642 void KWTableTemplateSelector::initPreview()
00643 {
00644 preview->disableRepaint(true);
00645 preview->cbFirstRowChanged( cbFirstRow->isChecked() );
00646 preview->cbFirstColChanged( cbFirstCol->isChecked( ) );
00647 preview->cbLastRowChanged(cbLastRow->isChecked() );
00648 preview->cbLastColChanged( cbLastCol->isChecked() );
00649 preview->cbBodyChanged( cbBody->isChecked() );
00650 preview->disableRepaint(false);
00651 preview->repaint();
00652 }
00653
00654 int KWTableTemplateSelector::getFormatType() const
00655 {
00656 int type = 0;
00657 if ( cbFirstRow->isChecked())
00658 {
00659 type = type | FirstRow;
00660 }
00661 if ( cbFirstCol->isChecked())
00662 {
00663 type = type |FirstColumn;
00664
00665 }
00666 if ( cbLastRow->isChecked())
00667 {
00668 type = type | LastRow;
00669
00670 }
00671 if ( cbLastCol->isChecked())
00672 {
00673 type = type | LastCol;
00674 }
00675 if ( cbBody->isChecked())
00676 {
00677 type = type | Body;
00678 }
00679 return type;
00680 }