00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "KWFrameDia.h"
00022 #include "KWTextFrameSet.h"
00023 #include "KWDocument.h"
00024 #include "KWFrameDia.moc"
00025 #include "KWCommand.h"
00026 #include "KWTableFrameSet.h"
00027 #include "KWPageManager.h"
00028 #include "KWPage.h"
00029 #include "KWPictureFrameSet.h"
00030
00031 #include <KoSetPropCommand.h>
00032 #include <KoParagDia_p.h>
00033
00034 #include <knuminput.h>
00035 #include <klocale.h>
00036 #include <kiconloader.h>
00037 #include <kmessagebox.h>
00038 #include <knumvalidator.h>
00039 #include <kcolorbutton.h>
00040 #include <kdebug.h>
00041
00042 #include <qwhatsthis.h>
00043 #include <qlineedit.h>
00044 #include <qcheckbox.h>
00045 #include <qcombobox.h>
00046 #include <qhbuttongroup.h>
00047 #include <qlabel.h>
00048 #include <qradiobutton.h>
00049 #include <qlistview.h>
00050 #include <qbuttongroup.h>
00051 #include <qhbox.h>
00052 #include <qheader.h>
00053 #include <qlayout.h>
00054
00055 #include <stdlib.h>
00056 #include <limits.h>
00057
00058
00059
00060
00061 KWBrushStylePreview::KWBrushStylePreview( QWidget* parent )
00062 : QFrame(parent)
00063 {
00064 }
00065
00066 void KWBrushStylePreview::drawContents( QPainter* painter )
00067 {
00068 painter->save();
00069 painter->translate( contentsRect().x(), contentsRect().y() );
00070 painter->fillRect( contentsRect(), colorGroup().base() );
00071 painter->fillRect( contentsRect(), brush );
00072 painter->restore();
00073 }
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095 KWFrameDia::KWFrameDia( QWidget* parent, KWFrame *frame)
00096 : KDialogBase( Tabbed, QString::null, Ok | Apply| Cancel, Ok, parent, "framedialog", true)
00097 {
00098 m_noSignal=false;
00099 m_frame = frame;
00100 m_mainFrame = 0;
00101 if(m_frame==0) {
00102 kdDebug() << "ERROR: KWFrameDia::constructor no frame.."<<endl;
00103 return;
00104 }
00105 setCaption( i18n( "Frame Properties for %1" ).arg( m_frame->frameSet()->name() ) );
00106 KWFrameSet *fs = m_frame->frameSet()->groupmanager();
00107 if(fs==0L) fs=m_frame->frameSet();
00108 m_frameType = fs->type();
00109 m_frameSetFloating = fs->isFloating();
00110 m_frameSetProtectedSize = fs->isProtectSize();
00111 m_mainFrameSetIncluded = fs->isMainFrameset();
00112 m_defaultFrameSetIncluded = fs->isMainFrameset() || fs->isHeaderOrFooter() || fs->isFootEndNote();
00113 if ( m_mainFrameSetIncluded )
00114 m_mainFrame = m_frame;
00115
00116 m_doc = 0;
00117 init();
00118 }
00119
00120
00121 KWFrameDia::KWFrameDia( QWidget* parent, KWFrame *frame, KWDocument *doc, FrameSetType ft )
00122 : KDialogBase( Tabbed, i18n("Frame Properties for New Frame"), Ok | Cancel, Ok, parent, "framedialog", true)
00123 {
00124 m_noSignal=false;
00125 m_frameType=ft;
00126 m_doc = doc;
00127 m_frame= frame;
00128 m_frameSetFloating = false;
00129 m_frameSetProtectedSize = false;
00130 m_mainFrameSetIncluded = false;
00131 m_defaultFrameSetIncluded = false;
00132 if(m_frame==0) {
00133 kdDebug() << "ERROR: KWFrameDia::constructor no m_frame.."<<endl;
00134 return;
00135 }
00136 m_mainFrame = 0;
00137 init();
00138 }
00139
00140 KWFrameDia::KWFrameDia( QWidget *parent, QPtrList<KWFrame> listOfFrames) : KDialogBase( Tabbed, i18n("Frames Properties"), Ok | Apply | Cancel, Ok, parent, "framedialog", true) , m_allFrames() {
00141 m_noSignal=false;
00142
00143 m_mainFrame = m_frame = 0L;
00144 m_tab1 = m_tab2 = m_tab3 = m_tab4 = m_tab5 = m_tab6 = 0;
00145
00146 KWFrame *f=listOfFrames.first();
00147 if(f==0) {
00148 kdDebug() << "ERROR: KWFrameDia::constructor no frames.."<<endl;
00149 return;
00150 }
00151 if ( listOfFrames.count() == 1 )
00152 setCaption( i18n( "Frame Settings for %1" ).arg( f->frameSet()->name() ) );
00153
00154 KWFrameSet *fs = f->frameSet()->groupmanager();
00155 if(fs==0L) fs=f->frameSet();
00156 m_frameType = fs->type();
00157 bool frameTypeUnset=true;
00158 m_doc = fs->kWordDocument();
00159
00160 if( !fs->isMainFrameset() ) {
00161 m_allFrames.append(f);
00162 frameTypeUnset=false;
00163 }
00164 else
00165 m_mainFrame = f;
00166
00167 f=listOfFrames.next();
00168 while(f) {
00169 fs = f->frameSet()->groupmanager();
00170 if(fs==0L) fs=f->frameSet();
00171 if(m_doc->processingType() != KWDocument::WP || m_doc->frameSet(0) != fs) {
00172 if(!frameTypeUnset && m_frameType != fs->type()) m_frameType= FT_TEXT;
00173 if(frameTypeUnset) {
00174 m_frameType = fs->type();
00175 frameTypeUnset = false;
00176 } else if(m_frameType != fs->type()) m_frameType= FT_TEXT;
00177 m_allFrames.append(f);
00178 }
00179 f=listOfFrames.next();
00180 }
00181 if(m_allFrames.count()==0)
00182 m_allFrames.append(listOfFrames.first());
00183
00184
00185 m_mainFrameSetIncluded = false;
00186 m_defaultFrameSetIncluded = false;
00187 for ( f = m_allFrames.first(); f; f = m_allFrames.next() ) {
00188 fs = f->frameSet();
00189 if ( !m_mainFrameSetIncluded )
00190 {
00191 m_mainFrameSetIncluded = fs->isMainFrameset();
00192 if ( m_mainFrameSetIncluded )
00193 m_mainFrame = f;
00194 }
00195 if ( !m_defaultFrameSetIncluded )
00196 m_defaultFrameSetIncluded = fs->isMainFrameset() || fs->isHeaderOrFooter() || fs->isFootEndNote();
00197 }
00198
00199
00200 init();
00201 }
00202
00203 void KWFrameDia::init() {
00204
00205 m_tab1 = m_tab2 = m_tab3 = m_tab4 = m_tab5 = m_tab6 = 0;
00206 m_sw = m_sh = 0L;
00207 m_cbAspectRatio=0L;
00208 KWFrameSet *fs=0;
00209 if(m_frame) {
00210 fs = m_frame->frameSet();
00211 KoRect r = m_frame->normalize();
00212 m_frame->setRect( r.x(), r.y(), r.width(), r.height() );
00213 }
00214 if(!m_doc && fs)
00215 {
00216 m_doc = fs->kWordDocument();
00217 }
00218 if(!m_doc)
00219 {
00220 kdDebug() << "ERROR: KWFrameDia::init frame has no reference to m_doc.."<<endl;
00221 return;
00222 }
00223 if( fs && fs->isMainFrameset() )
00224 {
00225 setupTab6();
00226 setupTab5();
00227 setupTab4();
00228 }
00229 else if ( fs && (fs->isHeaderOrFooter() || fs->isFootEndNote()) )
00230 {
00231 setupTab1();
00232 if ( !fs->isMainFrameset() && !fs->isHeaderOrFooter() && !fs->isFootEndNote())
00233 setupTab2();
00234 setupTab4();
00235 setupTab5();
00236 setupTab6();
00237 }
00238 else if(m_frameType == FT_TEXT)
00239 {
00240 setupTab1();
00241 if ( fs && !fs->isMainFrameset() && !fs->isHeaderOrFooter() && !fs->isFootEndNote())
00242 setupTab2();
00243 else if ( !fs )
00244 setupTab2();
00245 setupTab3();
00246 setupTab4();
00247 setupTab5();
00248 setupTab6();
00249 if(! fs)
00250 showPage(2);
00251 }
00252 else if(m_frameType == FT_PICTURE)
00253 {
00254 setupTab1();
00255 if ( m_frameType == FT_PICTURE )
00256 setupTab2();
00257 if(m_frame)
00258 setupTab4();
00259 setupTab6();
00260 showPage(1);
00261 }
00262 else if(m_frameType == FT_PART)
00263 {
00264 setupTab2();
00265 if(m_frame)
00266 setupTab4();
00267 setupTab6();
00268 }
00269 else if(m_frameType == FT_FORMULA)
00270 {
00271 setupTab1();
00272 setupTab2();
00273 if(m_frame)
00274 setupTab4();
00275 setupTab6();
00276 showPage(1);
00277 }
00278 else if(m_frameType == FT_TABLE)
00279 {
00280 setupTab4();
00281 setupTab5();
00282 setupTab6();
00283 }
00284 setInitialSize( QSize(550, 400) );
00285 }
00286
00287 void KWFrameDia::setupTab1(){
00288
00289 m_tab1 = addPage( i18n("Options") );
00290 int columns = 0;
00291 if(m_frameType == FT_FORMULA || m_frameType == FT_PICTURE)
00292 columns = 1;
00293 else if(m_frameType == FT_TEXT)
00294 columns = 2;
00295
00296 m_grid1 = new QGridLayout( m_tab1, 0 , columns, 0, KDialog::spacingHint() );
00297
00298
00299 m_cbCopy = new QCheckBox( i18n("Frame is a copy of the previous frame"),m_tab1 );
00300 m_grid1->addWidget(m_cbCopy,1,0);
00301
00302 if(m_frame) {
00303 m_cbCopy->setChecked( m_frame->isCopy() );
00304 m_cbCopy->setEnabled( m_frame->frameSet() && m_frame->frameSet()->frame( 0 ) != m_frame );
00305 } else {
00306 KWFrame *f=m_allFrames.first();
00307 bool show=true;
00308 bool enabled=f->frameSet() && f->frameSet()->frame( 0 ) != f;
00309 bool checked=f->isCopy();
00310 f=m_allFrames.next();
00311 while(f) {
00312 enabled=enabled || (f->frameSet() && f->frameSet()->frame( 0 ) != f);
00313 if(checked != f->isCopy()) show=false;
00314 f=m_allFrames.next();
00315 }
00316 if(! show) {
00317 m_cbCopy->setTristate();
00318 m_cbCopy->setNoChange();
00319 }
00320 else m_cbCopy->setChecked(checked);
00321 m_cbCopy->setEnabled( enabled );
00322 }
00323
00324
00325 if(m_frameType!=FT_TEXT)
00326 m_cbCopy->setEnabled( false );
00327
00328 int row = 2;
00329 int column = 0;
00330
00331
00332 if(m_frameType==FT_PICTURE)
00333 {
00334 m_cbAspectRatio = new QCheckBox (i18n("Retain original aspect ratio"),m_tab1);
00335 connect( m_cbAspectRatio, SIGNAL(toggled(bool)),
00336 this, SLOT(slotKeepRatioToggled(bool)));
00337 bool show=true;
00338 bool on=true;
00339 if(m_frame) {
00340 if ( m_frame->frameSet() )
00341 on= static_cast<KWPictureFrameSet *>( m_frame->frameSet() )->keepAspectRatio();
00342 } else {
00343 KWFrame *f=m_allFrames.first();
00344 KWPictureFrameSet *fs = dynamic_cast<KWPictureFrameSet *> (f->frameSet());
00345 if(fs)
00346 on=fs->keepAspectRatio();
00347 f=m_allFrames.next();
00348 while(f) {
00349 KWPictureFrameSet *fs = dynamic_cast<KWPictureFrameSet *> (f->frameSet());
00350 if(fs)
00351 if(on != fs->keepAspectRatio()) {
00352 show=false;
00353 break;
00354 }
00355 f=m_allFrames.next();
00356 }
00357 }
00358 m_cbAspectRatio->setChecked( on );
00359 if(! show) {
00360 m_cbAspectRatio->setTristate();
00361 m_cbAspectRatio->setNoChange();
00362 }
00363 m_grid1->addWidget(m_cbAspectRatio, row, 0);
00364 ++row;
00365 }
00366 else
00367 m_cbAspectRatio = 0L;
00368
00369
00370 if(m_frameType==FT_TEXT)
00371 {
00372
00373 m_endOfFrame = new QGroupBox(i18n("If Text is Too Long for Frame"), m_tab1 );
00374 m_grid1->addWidget( m_endOfFrame, row, 0 );
00375
00376 m_eofGrid= new QGridLayout (m_endOfFrame, 4, 1, KDialog::marginHint(), KDialog::spacingHint());
00377 m_rAppendFrame = new QRadioButton( i18n( "Create a new page" ), m_endOfFrame );
00378 QWhatsThis::add( m_rAppendFrame, "<b>Create a new page:</b><br/> if there is too "
00379 "much text for this text frame, a new page will be created and, "
00380 "since \"Reconnect frame to current flow\" is the only possible "
00381 "option together with this one, "
00382 "the new page will have a frame for showing the additional text." );
00383 m_eofGrid->addWidget( m_rAppendFrame, 1, 0 );
00384
00385 m_rResizeFrame = new QRadioButton( i18n( "Resize last frame" ), m_endOfFrame );
00386 QWhatsThis::add( m_rResizeFrame, "<b>Resize last frame:</b><br/> "
00387 "if there is too much text for this text frame, "
00388 "the frame will resize itself (increasing its height) as much as it needs, "
00389 "to be able to contain all the text. More precisely, when the frameset has "
00390 "multiple chained frames, it's always the last one which will be resized." );
00391 m_eofGrid->addWidget( m_rResizeFrame, 2, 0 );
00392
00393 m_rNoShow = new QRadioButton( i18n( "Don't show the extra text" ), m_endOfFrame );
00394 QWhatsThis::add( m_rNoShow, "<b>Don't show the extra text:</b><br/> "
00395 "if there is too much text for this text frame, nothing happens "
00396 "automatically. Initially the extra text won't appear. One possibility "
00397 "then is to resize the frame manually. The other possibility is, with the option "
00398 "\"Reconnect frame to current flow\" selected, to create a new page "
00399 "which will then have a followup frame with the extra text." );
00400 m_eofGrid->addWidget( m_rNoShow, 3, 0 );
00401 QButtonGroup *grp = new QButtonGroup( m_endOfFrame );
00402 grp->hide();
00403 grp->setExclusive( true );
00404 grp->insert( m_rAppendFrame );
00405 grp->insert( m_rResizeFrame );
00406 grp->insert( m_rNoShow );
00407
00408 m_eofGrid->addRowSpacing( 0, KDialog::marginHint() + 5 );
00409 KWFrame::FrameBehavior fb;
00410 bool show=true;
00411 if(m_frame) {
00412 fb = m_frame->frameBehavior();
00413 } else {
00414 KWFrame *f=m_allFrames.first();
00415 fb = f->frameBehavior();
00416 f=m_allFrames.next();
00417 while(f) {
00418 if(fb != f->frameBehavior()) {
00419 show=false;
00420 break;
00421 }
00422 f=m_allFrames.next();
00423 }
00424 }
00425 if(show) {
00426 if(fb == KWFrame::AutoExtendFrame) {
00427 m_rResizeFrame->setChecked(true);
00428 } else if (fb == KWFrame::AutoCreateNewFrame) {
00429 m_rAppendFrame->setChecked(true);
00430 } else {
00431 m_rNoShow->setChecked(true);
00432 }
00433 }
00434 column++;
00435 } else {
00436 m_rResizeFrame = 0L;
00437 m_rAppendFrame = 0L;
00438 m_rNoShow = 0L;
00439 }
00440
00441
00442 m_onNewPage = new QGroupBox(i18n("On New Page Creation"),m_tab1);
00443 m_grid1->addWidget( m_onNewPage, row, column );
00444
00445 m_onpGrid = new QGridLayout( m_onNewPage, 4, 1, KDialog::marginHint(), KDialog::spacingHint() );
00446 m_reconnect = new QRadioButton (i18n ("Reconnect frame to current flow"), m_onNewPage);
00447 QWhatsThis::add(m_reconnect, i18n("<b>Reconnect frame to current flow:</b><br/>"
00448 "When a new page is created, a new frame will be created for this "
00449 "frameset, so that the text can flow from one page to the next if necessary. "
00450 "This is what happens for the \"main text frameset\", but this option makes it possible "
00451 "to choose the same behavior for other framesets, for instance in magazine layouts."));
00452 if ( m_rResizeFrame )
00453 connect( m_reconnect, SIGNAL( clicked() ), this, SLOT( setFrameBehaviorInputOn() ) );
00454 m_onpGrid->addRowSpacing( 0, KDialog::marginHint() + 5 );
00455 m_onpGrid->addWidget( m_reconnect, 1, 0 );
00456
00457 m_noFollowup = new QRadioButton (i18n ("Do not create a followup frame"), m_onNewPage);
00458 QWhatsThis::add(m_noFollowup, i18n("<b>Do not create a followup frame:</b><br/>"
00459 "When a new page is created, no frame will be created for this frameset."));
00460 if ( m_rResizeFrame )
00461 connect( m_noFollowup, SIGNAL( clicked() ), this, SLOT( setFrameBehaviorInputOn() ) );
00462 m_onpGrid->addWidget( m_noFollowup, 2, 0 );
00463
00464 m_copyRadio= new QRadioButton (i18n ("Place a copy of this frame"), m_onNewPage);
00465 QWhatsThis::add(m_copyRadio, i18n("<b>Place a copy of this frame:</b><br/>"
00466 "When a new page is created, a frame will be created for this frameset, "
00467 "which will always show the exact same thing as the frame on the previous "
00468 "page. This is what happens for headers and footers, but this option "
00469 "makes it possible to choose the same behavior for other framesets, for "
00470 "instance a company logo and/or title that should appear exactly the same on every page."));
00471 if ( m_rResizeFrame )
00472 connect( m_copyRadio, SIGNAL( clicked() ), this, SLOT( setFrameBehaviorInputOff() ) );
00473 m_onpGrid->addWidget( m_copyRadio, 3, 0);
00474
00475 enableOnNewPageOptions();
00476
00477 QButtonGroup *grp2 = new QButtonGroup( m_onNewPage );
00478 grp2->hide();
00479 grp2->setExclusive( true );
00480 grp2->insert( m_reconnect );
00481 grp2->insert( m_noFollowup );
00482 grp2->insert( m_copyRadio );
00483 m_grid1->addRowSpacing( row, m_onNewPage->height());
00484 KWFrame::NewFrameBehavior nfb;
00485 bool show=true;
00486 if(m_frame) {
00487 nfb = m_frame->newFrameBehavior();
00488 } else {
00489 KWFrame *f=m_allFrames.first();
00490 nfb = f->newFrameBehavior();
00491 f=m_allFrames.next();
00492 while(f) {
00493 if(nfb != f->newFrameBehavior()) {
00494 show=false;
00495 break;
00496 }
00497 f=m_allFrames.next();
00498 }
00499 }
00500 if(show) {
00501 if(nfb == KWFrame::Reconnect) {
00502 m_reconnect->setChecked(true);
00503 } else if(nfb == KWFrame::NoFollowup) {
00504 m_noFollowup->setChecked(true);
00505 } else {
00506 m_copyRadio->setChecked(true);
00507 setFrameBehaviorInputOff();
00508 }
00509 }
00510
00511
00512
00513 if( false && m_frameType == FT_TEXT )
00514 {
00515 row++;
00516 m_sideHeads = new QGroupBox(i18n("SideHead Definition"),m_tab1);
00517 m_sideHeads->setEnabled(false);
00518 m_grid1->addWidget(m_sideHeads, row, 0);
00519
00520 m_sideGrid = new QGridLayout( m_sideHeads, 4, 2, KDialog::marginHint(), KDialog::spacingHint() );
00521 sideTitle1 = new QLabel ( i18n("Size (%1):").arg(m_doc->unitName()),m_sideHeads);
00522 sideTitle1->resize(sideTitle1->sizeHint());
00523 m_sideGrid->addWidget(sideTitle1,1,0);
00524 m_sideWidth= new QLineEdit(m_sideHeads,"");
00525 m_sideWidth->setMaxLength(6);
00526 m_sideGrid->addWidget(m_sideWidth,1,1);
00527 sideTitle2 = new QLabel( i18n("Gap size (%1):").arg(m_doc->unitName()),m_sideHeads);
00528 sideTitle2->resize(sideTitle2->sizeHint());
00529 m_sideGrid->addWidget(sideTitle2,2,0);
00530 m_sideGap = new QLineEdit(m_sideHeads,"");
00531 m_sideGap->setMaxLength(6);
00532 m_sideGrid->addWidget(m_sideGap,2,1);
00533 m_sideAlign = new QComboBox (false,m_sideHeads);
00534 m_sideAlign->setAutoResize(false);
00535 m_sideAlign->insertItem ( i18n("Left"));
00536 m_sideAlign->insertItem ( i18n("Right"));
00537 m_sideAlign->insertItem ( i18n("Closest to Binding"));
00538 m_sideAlign->insertItem ( i18n("Closest to Page Edge"));
00539 m_sideAlign->resize(m_sideAlign->sizeHint());
00540 m_sideGrid->addMultiCellWidget(m_sideAlign,3,3,0,1);
00541 m_sideGrid->addRowSpacing( 0, KDialog::marginHint() + 5 );
00542
00543
00544 m_sideWidth->setText("0");
00545 m_sideWidth->setValidator( new KFloatValidator(0,9999,true, m_sideWidth) );
00546
00547 m_sideGap->setText("0");
00548 m_sideGap->setValidator( new KFloatValidator(0,9999,true, m_sideGap) );
00549
00550 }
00551
00552 m_cbAllFrames = new QCheckBox (i18n("Changes will be applied to all frames in frameset"),m_tab1);
00553 m_cbAllFrames->setChecked(m_frame!=0L);
00554 row++;
00555 m_grid1->addMultiCellWidget(m_cbAllFrames,row,row, 0, 1);
00556 m_cbProtectContent = new QCheckBox( i18n("Protect content"), m_tab1);
00557 QWhatsThis::add(m_cbProtectContent, i18n("<b>Protect content:</b><br/>"
00558 "Disallow changes to be made to the contents of the frame(s)."));
00559 connect( m_cbProtectContent, SIGNAL(toggled ( bool ) ), this, SLOT(slotProtectContentChanged( bool )));
00560 row++;
00561 m_grid1->addMultiCellWidget(m_cbProtectContent,row,row, 0, 1);
00562 if( m_frameType != FT_TEXT || m_frame!=0 && m_frame->frameSet()==0) {
00563 m_cbAllFrames->setChecked(false);
00564 m_cbAllFrames->hide();
00565 m_cbProtectContent->setChecked( false );
00566 m_cbProtectContent->hide();
00567 }
00568 else if ( m_frameType == FT_TEXT )
00569 {
00570 bool show=true;
00571 bool on=true;
00572 if(m_frame)
00573 {
00574 if ( m_frame->frameSet() )
00575 on= static_cast<KWTextFrameSet *>(m_frame->frameSet() )->textObject()->protectContent();
00576 }
00577 else
00578 {
00579 KWFrame *f=m_allFrames.first();
00580 KWTextFrameSet *fs = dynamic_cast<KWTextFrameSet *> (f->frameSet());
00581 if(fs)
00582 on=fs->textObject()->protectContent();
00583 f=m_allFrames.next();
00584 while(f) {
00585 KWTextFrameSet *fs = dynamic_cast<KWTextFrameSet *> (f->frameSet());
00586 if(fs)
00587 {
00588 if(on != fs->textObject()->protectContent())
00589 {
00590 show=false;
00591 break;
00592 }
00593 }
00594 f=m_allFrames.next();
00595 }
00596 }
00597 m_cbProtectContent->setChecked( on );
00598 if(! show) {
00599 m_cbProtectContent->setTristate();
00600 m_cbProtectContent->setNoChange();
00601 }
00602 }
00603
00604 for(int i=0;i < row;i++)
00605 m_grid1->setRowStretch( i, 0 );
00606 m_grid1->setRowStretch( row + 1, 1 );
00607 }
00608
00609 void KWFrameDia::setupTab2() {
00610 m_tab2 = addPage( i18n( "Text Run Around" ) );
00611
00612 QVBoxLayout *tabLayout = new QVBoxLayout( m_tab2, 0, KDialog::spacingHint(), "tabLayout");
00613
00614
00615 m_runGroup = new QButtonGroup( i18n( "Layout of Text in Other Frames" ), m_tab2);
00616 m_runGroup->setColumnLayout( 0, Qt::Vertical );
00617 m_runGroup->layout()->setSpacing( KDialog::spacingHint() );
00618 QGridLayout *groupBox1Layout = new QGridLayout( m_runGroup->layout() );
00619 groupBox1Layout->setAlignment( Qt::AlignTop );
00620
00621 m_rRunNo = new QRadioButton( i18n( "Text will run &through this frame" ), m_runGroup );
00622 groupBox1Layout->addWidget( m_rRunNo, 0, 1 );
00623
00624 m_rRunBounding = new QRadioButton( i18n( "Text will run &around the frame" ), m_runGroup );
00625 groupBox1Layout->addWidget( m_rRunBounding, 1, 1 );
00626
00627 m_rRunSkip = new QRadioButton( i18n( "Text will ¬ run around this frame" ), m_runGroup );
00628 groupBox1Layout->addWidget( m_rRunSkip, 2, 1 );
00629
00630 QPixmap pixmap = KWBarIcon( "run_not" );
00631 QLabel *lRunNo = new QLabel( m_runGroup );
00632 lRunNo->setBackgroundPixmap( pixmap );
00633 lRunNo->setFixedSize( pixmap.size() );
00634 groupBox1Layout->addWidget( lRunNo, 0, 0 );
00635
00636 pixmap = KWBarIcon( "run_bounding" );
00637 QLabel *lRunBounding = new QLabel( m_runGroup );
00638 lRunBounding->setBackgroundPixmap( pixmap );
00639 lRunBounding->setFixedSize( pixmap.size() );
00640 groupBox1Layout->addWidget( lRunBounding, 1, 0 );
00641
00642 pixmap = KWBarIcon( "run_skip" );
00643 QLabel *lRunSkip = new QLabel( m_runGroup );
00644 lRunSkip->setBackgroundPixmap( pixmap );
00645 lRunSkip->setFixedSize( pixmap.size() );
00646 groupBox1Layout->addWidget( lRunSkip, 2, 0 );
00647
00648 tabLayout->addWidget( m_runGroup );
00649
00650
00651 m_runSideGroup = new QButtonGroup( i18n( "Run Around Side" ), m_tab2);
00652 m_runSideGroup->setColumnLayout( 0, Qt::Vertical );
00653 m_runSideGroup->layout()->setSpacing( KDialog::spacingHint() );
00654 m_runSideGroup->layout()->setMargin( KDialog::marginHint() );
00655 QGridLayout *runSideLayout = new QGridLayout( m_runSideGroup->layout() );
00656 runSideLayout->setAlignment( Qt::AlignTop );
00657
00658 m_rRunLeft = new QRadioButton( i18n( "Run Around", "&Left" ), m_runSideGroup );
00659 runSideLayout->addWidget( m_rRunLeft, 0, 0 );
00660
00661 m_rRunRight = new QRadioButton( i18n( "Run Around", "&Right" ), m_runSideGroup );
00662 runSideLayout->addWidget( m_rRunRight, 1, 0 );
00663
00664 m_rRunBiggest = new QRadioButton( i18n( "Run Around", "Lon&gest side" ), m_runSideGroup );
00665 runSideLayout->addWidget( m_rRunBiggest, 2, 0 );
00666
00667 #if 0 // TODO icons!
00668 QPixmap pixmap = KWBarIcon( "run_left" );
00669 QLabel *label = new QLabel( m_runSideGroup );
00670 label->setBackgroundPixmap( pixmap );
00671 label->setFixedSize( pixmap.size() );
00672 runSideLayout->addWidget( label, 0, 0 );
00673
00674 pixmap = KWBarIcon( "run_right" );
00675 label = new QLabel( m_runSideGroup );
00676 label->setBackgroundPixmap( pixmap );
00677 label->setFixedSize( pixmap.size() );
00678 runSideLayout->addWidget( label, 1, 0 );
00679
00680 pixmap = KWBarIcon( "run_biggest" );
00681 label = new QLabel( m_runSideGroup );
00682 label->setBackgroundPixmap( pixmap );
00683 label->setFixedSize( pixmap.size() );
00684 runSideLayout->addWidget( label, 2, 0 );
00685 #endif
00686
00687 tabLayout->addWidget( m_runSideGroup );
00688
00689 m_raDistConfigWidget = new KWFourSideConfigWidget( m_doc, i18n("Distance Between Frame && Text"), m_tab2 );
00690 if ( m_frame )
00691 m_raDistConfigWidget->setValues( QMAX(0.00, m_frame->runAroundLeft()),
00692 QMAX(0.00, m_frame->runAroundRight()),
00693 QMAX(0.00, m_frame->runAroundTop()),
00694 QMAX(0.00, m_frame->runAroundBottom()) );
00695 tabLayout->addWidget( m_raDistConfigWidget );
00696
00697
00698
00699
00700
00701
00702 bool show=true;
00703 KWFrame::RunAround ra = KWFrame::RA_NO;
00704 if ( m_frame )
00705 ra = m_frame->runAround();
00706 else {
00707 KWFrame *f=m_allFrames.first();
00708 ra = f->runAround();
00709 f=m_allFrames.next();
00710 while(f) {
00711 if(ra != f->runAround()) show=false;
00712 f=m_allFrames.next();
00713 }
00714 }
00715
00716 if(show) {
00717 switch ( ra ) {
00718 case KWFrame::RA_NO: m_rRunNo->setChecked( true ); break;
00719 case KWFrame::RA_BOUNDINGRECT: m_rRunBounding->setChecked( true ); break;
00720 case KWFrame::RA_SKIP: m_rRunSkip->setChecked( true ); break;
00721 }
00722 }
00723
00724
00725 show = true;
00726 KWFrame::RunAroundSide rs = KWFrame::RA_BIGGEST;
00727 if ( m_frame )
00728 rs = m_frame->runAroundSide();
00729 else {
00730 KWFrame *f=m_allFrames.first();
00731 rs = f->runAroundSide();
00732 f = m_allFrames.next();
00733 while(f) {
00734 if(rs != f->runAroundSide()) show=false;
00735 f=m_allFrames.next();
00736 }
00737 }
00738
00739 if(show) {
00740 switch ( rs ) {
00741 case KWFrame::RA_LEFT: m_rRunLeft->setChecked( true ); break;
00742 case KWFrame::RA_RIGHT: m_rRunRight->setChecked( true ); break;
00743 case KWFrame::RA_BIGGEST: m_rRunBiggest->setChecked( true ); break;
00744 }
00745 }
00746
00747
00748 show=true;
00749 double ragapLeft = 0;
00750 double ragapRight = 0;
00751 double ragapTop = 0;
00752 double ragapBottom = 0;
00753 if ( m_frame ) {
00754 ragapLeft = m_frame->runAroundLeft();
00755 ragapRight = m_frame->runAroundRight();
00756 ragapTop = m_frame->runAroundTop();
00757 ragapBottom = m_frame->runAroundBottom();
00758 }
00759 else {
00760 KWFrame *f = m_allFrames.first();
00761 ragapLeft = f->runAroundLeft();
00762 ragapRight = f->runAroundRight();
00763 ragapTop = f->runAroundTop();
00764 ragapBottom = f->runAroundBottom();
00765 for( f = m_allFrames.next() ; f ; f = m_allFrames.next() ) {
00766 if( ragapLeft != f->runAroundLeft() ||
00767 ragapRight != f->runAroundRight() ||
00768 ragapTop != f->runAroundTop() ||
00769 ragapBottom != f->runAroundBottom() )
00770 show = false;
00771 f = m_allFrames.next();
00772 }
00773 }
00774
00775 if(show)
00776 m_raDistConfigWidget->setValues( ragapLeft, ragapRight, ragapTop, ragapBottom );
00777
00778 enableRunAround();
00779
00780
00781 connect( m_runGroup, SIGNAL( clicked(int) ), this, SLOT( enableRunAround() ) );
00782 }
00783
00784 void KWFrameDia::setupTab3(){
00785
00786
00787
00788
00789
00790
00791
00792
00793 m_tab3 = addPage( i18n( "Connect Text Frames" ) );
00794
00795 QVBoxLayout *tabLayout = new QVBoxLayout( m_tab3, 0, KDialog::spacingHint());
00796
00797 QButtonGroup *myGroup = new QButtonGroup(this);
00798 myGroup->hide();
00799
00800 m_rExistingFrameset = new QRadioButton( m_tab3, "m_rExistingFrameset" );
00801 m_rExistingFrameset->setText( i18n("Select existing frameset to connect frame to:") );
00802 tabLayout->addWidget( m_rExistingFrameset );
00803 myGroup->insert(m_rExistingFrameset,1);
00804 connect (m_rExistingFrameset, SIGNAL( toggled(bool)), this, SLOT(ensureValidFramesetSelected()));
00805
00806 QHBoxLayout *layout2 = new QHBoxLayout( 0, 0, 6);
00807 QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
00808 layout2->addItem( spacer );
00809
00810 m_lFrameSList = new QListView( m_tab3, "m_lFrameSList" );
00811 m_lFrameSList->addColumn( i18n("No.") );
00812 m_lFrameSList->addColumn( i18n("Frameset Name") );
00813 m_lFrameSList->setAllColumnsShowFocus( true );
00814 m_lFrameSList->header()->setMovingEnabled( false );
00815 connect( m_lFrameSList, SIGNAL(selectionChanged ()),this,SLOT(selectExistingFrameset ()) );
00816 connect (m_lFrameSList, SIGNAL( selectionChanged()), this, SLOT(ensureValidFramesetSelected()));
00817
00818 layout2->addWidget( m_lFrameSList );
00819 tabLayout->addLayout( layout2 );
00820
00821 m_rNewFrameset = new QRadioButton( m_tab3);
00822 m_rNewFrameset->setText( i18n( "Create a new frameset" ) );
00823 tabLayout->addWidget( m_rNewFrameset );
00824 myGroup->insert(m_rNewFrameset,2);
00825
00826 QFrame *line1 = new QFrame( m_tab3 );
00827 line1->setProperty( "frameShape", (int)QFrame::HLine );
00828 line1->setFrameShadow( QFrame::Plain );
00829 line1->setFrameShape( QFrame::HLine );
00830 tabLayout->addWidget( line1 );
00831
00832 QHBoxLayout *layout1 = new QHBoxLayout( 0, 0, 6 );
00833 QLabel *textLabel1 = new QLabel( m_tab3 );
00834 textLabel1->setText( i18n( "Name of frameset:" ) );
00835 layout1->addWidget( textLabel1 );
00836
00837 m_eFrameSetName = new QLineEdit( m_tab3 );
00838 layout1->addWidget( m_eFrameSetName );
00839 tabLayout->addLayout( layout1 );
00840
00841 int amount=0;
00842
00843 for ( unsigned int i = 0; i < m_doc->frameSetCount(); i++ ) {
00844 KWFrameSet * fs = m_doc->frameSet( i );
00845 if ( i == 0 && m_doc->processingType() == KWDocument::WP )
00846 continue;
00847 if ( fs->type() != FT_TEXT || fs->isHeaderOrFooter() )
00848 continue;
00849 if ( fs->frameSetInfo() == KWFrameSet::FI_FOOTNOTE )
00850 continue;
00851 if ( fs->groupmanager() )
00852 continue;
00853 if ( fs->isDeleted() )
00854 continue;
00855 QListViewItem *item = new QListViewItem( m_lFrameSList );
00856 item->setText( 0, QString( "%1" ).arg( i + 1 ) );
00857 item->setText( 1, fs->name() );
00858 amount++;
00859 if( m_frame && m_frame->frameSet() == fs ) {
00860 m_lFrameSList->setSelected(item, TRUE );
00861 m_oldFrameSetName = fs->name();
00862 m_rExistingFrameset->setChecked(true);
00863 }
00864 }
00865 if(amount==0) {
00866 m_rNewFrameset->setChecked(false);
00867 m_rNewFrameset->setEnabled(false);
00868 m_rExistingFrameset->setEnabled(false);
00869 m_lFrameSList->setEnabled(false);
00870 }
00871
00872
00873 if ( m_allFrames.count() > 1 ) {
00874 m_rNewFrameset->setChecked(false);
00875 m_rNewFrameset->setEnabled(false);
00876 myGroup->setRadioButtonExclusive( false );
00877 }
00878 if(m_frame && m_frame->frameSet() == 0) {
00879 m_oldFrameSetName = m_doc->generateFramesetName( i18n( "Text Frameset %1" ) );
00880 m_rNewFrameset->setChecked(true);
00881 }
00882 m_eFrameSetName->setText( m_oldFrameSetName );
00883
00884 connect( m_lFrameSList, SIGNAL( currentChanged( QListViewItem * ) ),
00885 this, SLOT( connectListSelected( QListViewItem * ) ) );
00886 connect(m_eFrameSetName, SIGNAL(textChanged ( const QString & ) ),
00887 this,SLOT(textNameFrameChanged ( const QString & ) ) );
00888 connect(m_eFrameSetName, SIGNAL(textChanged ( const QString & )),
00889 this,SLOT(textNameFrameChanged ( const QString & ) ));
00890 connect( m_rNewFrameset, SIGNAL(toggled (bool)),
00891 this,SLOT(selectNewFrameset (bool)) );
00892 }
00893
00894 void KWFrameDia::selectExistingFrameset() {
00895 m_rExistingFrameset->setChecked(true);
00896 }
00897
00898 void KWFrameDia::selectNewFrameset(bool on) {
00899 if(!on) return;
00900
00901 QListViewItem *frameSetItem = m_lFrameSList->selectedItem();
00902 if ( !frameSetItem)
00903 return;
00904 QString str = frameSetItem->text( 0 );
00905 KWFrameSet *fs = m_doc->frameSet(str.toInt() - 1);
00906
00907 frameSetItem->setText(1, fs->name() );
00908 }
00909
00910 void KWFrameDia::textNameFrameChanged ( const QString &text )
00911 {
00912 if(m_rExistingFrameset->isChecked()) {
00913 QListViewItem *item = m_lFrameSList->selectedItem();
00914 if ( !item )
00915 return;
00916 item->setText(1, text );
00917 }
00918 if(m_rNewFrameset->isChecked() || m_rExistingFrameset->isChecked())
00919 enableButtonOK( !text.isEmpty() );
00920 else
00921 enableButtonOK( true );
00922 }
00923
00924 void KWFrameDia::setupTab4() {
00925 m_noSignal = true;
00926
00927 m_tab4 = addPage( i18n( "Geometry" ) );
00928 QGridLayout* grid4 = new QGridLayout( m_tab4, 5, 1, 0, KDialog::spacingHint() );
00929
00930 m_floating = new QCheckBox( i18n("Frame is inline"), m_tab4 );
00931
00932 connect( m_floating, SIGNAL( toggled(bool) ), this, SLOT( slotFloatingToggled(bool) ) );
00933 int row = 0;
00934 grid4->addMultiCellWidget( m_floating, row, row, 0, 1 );
00935
00936 row++;
00937 m_protectSize = new QCheckBox( i18n("Protect size and position"), m_tab4);
00938 grid4->addMultiCellWidget( m_protectSize, row, row, 0, 1 );
00939 connect( m_protectSize, SIGNAL( toggled(bool) ), this, SLOT( slotProtectSizeToggled(bool) ) );
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960 m_grp1 = new QGroupBox( i18n("Position"), m_tab4 );
00961 QGridLayout* pGrid = new QGridLayout( m_grp1, 3, 4, KDialog::marginHint(), KDialog::spacingHint() );
00962
00963 m_lx = new QLabel( i18n( "Left:" ), m_grp1 );
00964 m_lx->resize( m_lx->sizeHint() );
00965 pGrid->addWidget( m_lx, 1, 0 );
00966
00967 m_sx = new KoUnitDoubleSpinBox( m_grp1, 0, 9999, 1, 0.0, m_doc->unit() );
00968
00969 m_sx->resize( m_sx->sizeHint() );
00970 pGrid->addWidget( m_sx, 1, 1 );
00971
00972 m_ly = new QLabel( i18n( "Top:" ), m_grp1 );
00973 m_ly->resize( m_ly->sizeHint() );
00974 pGrid->addWidget( m_ly, 1, 2 );
00975
00976 m_sy = new KoUnitDoubleSpinBox( m_grp1, 0, 9999, 1, 0.0, m_doc->unit() );
00977 m_sy->resize( m_sy->sizeHint() );
00978 pGrid->addWidget( m_sy, 1, 3 );
00979
00980 m_lw = new QLabel( i18n( "Width:" ), m_grp1 );
00981 m_lw->resize( m_lw->sizeHint() );
00982 pGrid->addWidget( m_lw, 2, 0 );
00983
00984 m_sw = new KoUnitDoubleSpinBox( m_grp1, 0, 9999, 1, 0.0, m_doc->unit() );
00985
00986 m_sw->resize( m_sw->sizeHint() );
00987 connect( m_sw, SIGNAL(valueChanged(double)),
00988 this, SLOT(slotUpdateHeightForWidth(double)) );
00989
00990 pGrid->addWidget( m_sw, 2, 1 );
00991
00992 m_lh = new QLabel( i18n( "Height:" ), m_grp1 );
00993 m_lh->resize( m_lh->sizeHint() );
00994 pGrid->addWidget( m_lh, 2, 2 );
00995
00996 m_sh = new KoUnitDoubleSpinBox( m_grp1, 0, 9999, 1, 0.0, m_doc->unit() );
00997 connect( m_sh, SIGNAL(valueChanged(double)),
00998 this, SLOT(slotUpdateWidthForHeight(double)) );
00999
01000 m_sh->resize( m_sh->sizeHint() );
01001
01002 pGrid->addWidget( m_sh, 2, 3 );
01003
01004 pGrid->setRowSpacing( 0, KDialog::spacingHint() + 5 );
01005
01006 row++;
01007 grid4->addMultiCellWidget( m_grp1, row, row, 0,1 );
01008
01009 if(m_frame) {
01010 m_paddingConfigWidget = new KWFourSideConfigWidget( m_doc, i18n("Margins"), m_tab4 );
01011 m_paddingConfigWidget->setValues( QMAX(0.00, m_frame->paddingLeft()),
01012 QMAX(0.00, m_frame->paddingRight()),
01013 QMAX(0.00, m_frame->paddingTop()),
01014 QMAX(0.00, m_frame->paddingBottom()) );
01015 row++;
01016 grid4->addMultiCellWidget( m_paddingConfigWidget, row, row, 0, 1 );
01017
01018 if ( m_tab1 && m_cbProtectContent )
01019 {
01020 m_paddingConfigWidget->setEnabled( !m_cbProtectContent->isChecked() );
01021 }
01022 }
01023 else
01024 {
01025 m_paddingConfigWidget = 0;
01026 }
01027
01028 initGeometrySettings();
01029
01030 if ( !m_frame || m_defaultFrameSetIncluded ) {
01031
01032
01033 m_sx->setEnabled( false );
01034 m_sy->setEnabled( false );
01035 m_lx->setEnabled( false );
01036 m_ly->setEnabled( false );
01037 m_lw->setEnabled( false );
01038 m_lh->setEnabled( false );
01039 m_floating->setEnabled( false );
01040 }
01041
01042 if ( m_defaultFrameSetIncluded || m_mainFrameSetIncluded)
01043 {
01044 m_sw->setEnabled( false );
01045 m_sh->setEnabled( false );
01046 m_grp1->setEnabled( false );
01047 }
01048
01049 if ( m_mainFrameSetIncluded )
01050 {
01051 m_grp1->hide();
01052 m_floating->hide( );
01053 m_protectSize->hide();
01054 }
01055 m_noSignal=false;
01056
01057 ++row;
01058 grid4->setRowStretch( row, 1 );
01059 }
01060
01061 void KWFrameDia::initGeometrySettings()
01062 {
01063 if ( m_frame ) {
01064
01065
01066
01067 int pageNum = m_doc->pageManager()->pageNumber(m_frame);
01068
01069 m_sx->setValue( KoUnit::toUserValue( m_frame->x(), m_doc->unit() ) );
01070 m_sy->setValue( KoUnit::toUserValue( m_frame->y() - m_doc->pageManager()->topOfPage(pageNum), m_doc->unit() ) );
01071 m_sw->setValue( KoUnit::toUserValue( m_frame->width(), m_doc->unit() ) );
01072 m_sh->setValue( KoUnit::toUserValue( m_frame->height(), m_doc->unit() ) );
01073
01074 calcRatio();
01075
01076
01077
01078 m_oldX = m_sx->value();
01079 m_oldY = m_sy->value();
01080 m_oldW = m_sw->value();
01081 m_oldH = m_sh->value();
01082
01083 #ifdef ALLOW_NON_INLINE_TABLES
01084 KWFrameSet * fs = m_frame->frameSet();
01085 if ( fs && fs->groupmanager() )
01086 m_floating->setText( i18n( "Table is inline" ) );
01087 #else
01088 m_floating->hide();
01089 #endif
01090
01091 m_floating->setChecked( m_frameSetFloating );
01092 m_protectSize->setChecked( m_frameSetProtectedSize);
01093 } else {
01094
01095 KWFrame *f=m_allFrames.first();
01096 KWFrameSet *fs=f->frameSet();
01097 bool ps=fs->isProtectSize();
01098 m_protectSize->setChecked( ps );
01099
01100 bool table=fs->groupmanager();
01101 if(table)
01102 fs=fs->groupmanager();
01103 bool inlineframe =fs->isFloating();
01104 m_floating->setChecked( inlineframe );
01105
01106 double commonWidth = f->width();
01107 double commonHeight = f->height();
01108 m_sw->setEnabled( true );
01109 m_sh->setEnabled( true );
01110
01111 f=m_allFrames.next();
01112 while(f) {
01113 KWFrameSet *fs=f->frameSet();
01114 if(ps != fs->isProtectSize()) {
01115 m_protectSize->setTristate();
01116 m_protectSize->setNoChange();
01117 }
01118 if(fs->groupmanager())
01119 fs=fs->groupmanager();
01120 else
01121 table=false;
01122
01123 if(inlineframe != fs->isFloating()) {
01124 m_floating->setTristate();
01125 m_floating->setNoChange();
01126 }
01127
01128 if ( kAbs( f->width() - commonWidth ) > 1E-6 ) {
01129 kdDebug() << k_funcinfo << "width differs:" << f->width() << " " << commonWidth << endl;
01130 m_sw->setEnabled( false );
01131 }
01132 if ( kAbs( f->height() - commonHeight ) > 1E-6 ) {
01133 kdDebug() << k_funcinfo << "height differs:" << f->height() << " " << commonHeight << endl;
01134 m_sh->setEnabled( false );
01135 }
01136
01137 f=m_allFrames.next();
01138 }
01139
01140 if ( m_sw->isEnabled() )
01141 m_sw->setValue( KoUnit::toUserValue( commonWidth, m_doc->unit() ) );
01142 if ( m_sh->isEnabled() )
01143 m_sh->setValue( KoUnit::toUserValue( commonHeight, m_doc->unit() ) );
01144 if(table)
01145 {
01146 #ifdef ALLOW_NON_INLINE_TABLES
01147 m_floating->setText( i18n( "Table is inline" ) );
01148 #else
01149 m_floating->hide();
01150 #endif
01151 }
01152 }
01153 }
01154
01155 void KWFrameDia::setupTab5() {
01156 m_tab5 = addPage( i18n("Background") );
01157 QGridLayout* grid5 = new QGridLayout( m_tab5, 0 , 2, 0, KDialog::spacingHint() );
01158
01159 int row = 0;
01160 if (!m_frame ) {
01161 m_overwriteColor = new QCheckBox (i18n("Set new color on all selected frames"), m_tab5);
01162 grid5->addMultiCellWidget(m_overwriteColor,row,row,0,1);
01163 row++;
01164 }
01165
01166
01167
01168 m_transparentCB = new QCheckBox( i18n( "Transparent background" ), m_tab5 );
01169 grid5->addWidget(m_transparentCB,row++,0);
01170 m_transparentCB->setEnabled( !m_mainFrameSetIncluded );
01171
01172 QLabel *labelBgColor = new QLabel( i18n( "Background color:" ), m_tab5 );
01173
01174 grid5->addWidget(labelBgColor,row++,0);
01175
01176 m_brushColor = new KColorButton( Qt::white, KWDocument::defaultBgColor(0), m_tab5 );
01177 grid5->addWidget(m_brushColor,row++,0);
01178
01179
01180
01181
01182
01183
01184
01185
01186 #if 0
01187 l = new QLabel( i18n( "Background style:" ), m_tab5 );
01188 grid5->addWidget(l,row++,0);
01189
01190 brushStyle = new QComboBox( false,m_tab5, "BStyle" );
01191 grid5->addWidget(brushStyle,row++,0);
01192
01193 brushStyle->insertItem( i18n( "No Background Fill" ) );
01194
01195 brushStyle->insertItem( i18n( "100% Fill Pattern" ) );
01196
01197 brushStyle->insertItem( i18n( "94% Fill Pattern" ) );
01198
01199 brushStyle->insertItem( i18n( "88% Fill Pattern" ) );
01200
01201 brushStyle->insertItem( i18n( "63% Fill Pattern" ) );
01202
01203 brushStyle->insertItem( i18n( "50% Fill Pattern" ) );
01204
01205 brushStyle->insertItem( i18n( "37% Fill Pattern" ) );
01206
01207 brushStyle->insertItem( i18n( "12% Fill Pattern" ) );
01208
01209 brushStyle->insertItem( i18n( "6% Fill Pattern" ) );
01210 brushStyle->insertItem( i18n( "Horizontal Lines" ) );
01211 brushStyle->insertItem( i18n( "Vertical Lines" ) );
01212 brushStyle->insertItem( i18n( "Crossing Lines" ) );
01213 brushStyle->insertItem( i18n( "Diagonal Lines ( / )" ) );
01214 brushStyle->insertItem( i18n( "Diagonal Lines ( \\ )" ) );
01215 brushStyle->insertItem( i18n( "Diagonal Crossing Lines" ) );
01216 connect( brushStyle, SIGNAL( activated( int ) ),
01217 this, SLOT( updateBrushPreview() ) );
01218
01219 updateBrushPreview();
01220 #endif
01221
01222 connect( m_transparentCB, SIGNAL( toggled( bool ) ), labelBgColor, SLOT( setDisabled( bool ) ) );
01223 connect( m_transparentCB, SIGNAL( toggled( bool ) ), m_brushColor, SLOT( setDisabled( bool ) ) );
01224 initBrush();
01225
01226 QSpacerItem* spacer = new QSpacerItem( 10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding);
01227 grid5->addItem( spacer,row,0 );
01228 }
01229
01230 void KWFrameDia::setupTab6()
01231 {
01232 m_tab6 = addPage( i18n("&Borders") );
01233
01234 QGridLayout *grid = new QGridLayout( m_tab6, 8, 2, 0, KDialog::spacingHint() );
01235
01236 QLabel * lStyle = new QLabel( i18n( "St&yle:" ), m_tab6 );
01237 grid->addWidget( lStyle, 0, 0 );
01238
01239 m_cStyle = new QComboBox( false, m_tab6 );
01240 m_cStyle->insertItem( KoBorder::getStyle( KoBorder::SOLID ) );
01241 m_cStyle->insertItem( KoBorder::getStyle( KoBorder::DASH ) );
01242 m_cStyle->insertItem( KoBorder::getStyle( KoBorder::DOT ) );
01243 m_cStyle->insertItem( KoBorder::getStyle( KoBorder::DASH_DOT ) );
01244 m_cStyle->insertItem( KoBorder::getStyle( KoBorder::DASH_DOT_DOT ) );
01245 m_cStyle->insertItem( KoBorder::getStyle( KoBorder::DOUBLE_LINE ) );
01246 lStyle->setBuddy( m_cStyle );
01247 grid->addWidget( m_cStyle, 1, 0 );
01248
01249 QLabel * lWidth = new QLabel( i18n( "&Width:" ), m_tab6 );
01250 grid->addWidget( lWidth, 2, 0 );
01251
01252 m_cWidth = new QComboBox( false, m_tab6 );
01253 for( unsigned int i = 1; i <= 10; i++ )
01254 m_cWidth->insertItem(QString::number(i));
01255 lWidth->setBuddy( m_cWidth );
01256 grid->addWidget( m_cWidth, 3, 0 );
01257
01258 QLabel * lColor = new QLabel( i18n( "Co&lor:" ), m_tab6 );
01259 grid->addWidget( lColor, 4, 0 );
01260
01261 m_bColor = new KColorButton( black,
01262 black,
01263 m_tab6 );
01264
01265 lColor->setBuddy( m_bColor );
01266 grid->addWidget( m_bColor, 5, 0 );
01267
01268 QButtonGroup * bb = new QHButtonGroup( m_tab6 );
01269 bb->setFrameStyle(QFrame::NoFrame);
01270 m_bLeft = new QPushButton(bb);
01271 m_bLeft->setPixmap( BarIcon( "borderleft" ) );
01272 m_bLeft->setToggleButton( true );
01273 m_bRight = new QPushButton(bb);
01274 m_bRight->setPixmap( BarIcon( "borderright" ) );
01275 m_bRight->setToggleButton( true );
01276 m_bTop = new QPushButton(bb);
01277 m_bTop->setPixmap( BarIcon( "bordertop" ) );
01278 m_bTop->setToggleButton( true );
01279 m_bBottom = new QPushButton(bb);
01280 m_bBottom->setPixmap( BarIcon( "borderbottom" ) );
01281 m_bBottom->setToggleButton( true );
01282 grid->addWidget( bb, 6, 0 );
01283
01284 connect( m_bLeft, SIGNAL( toggled( bool ) ), this, SLOT( brdLeftToggled( bool ) ) );
01285 connect( m_bRight, SIGNAL( toggled( bool ) ), this, SLOT( brdRightToggled( bool ) ) );
01286 connect( m_bTop, SIGNAL( toggled( bool ) ), this, SLOT( brdTopToggled( bool ) ) );
01287 connect( m_bBottom, SIGNAL( toggled( bool ) ), this, SLOT( brdBottomToggled( bool ) ) );
01288
01289 initBorderSettings();
01290
01291 QGroupBox *grp=new QGroupBox( 0, Qt::Vertical, i18n( "Preview" ), m_tab6, "previewgrp" );
01292 grid->addMultiCellWidget( grp , 0, 7, 1, 1 );
01293 grp->layout()->setSpacing(KDialog::spacingHint());
01294 grp->layout()->setMargin(KDialog::marginHint());
01295 m_prev3 = new KoBorderPreview( grp );
01296 QVBoxLayout *lay1 = new QVBoxLayout( grp->layout() );
01297 lay1->addWidget(m_prev3);
01298
01299 connect( m_prev3, SIGNAL( choosearea(QMouseEvent * ) ),
01300 this, SLOT( slotPressEvent(QMouseEvent *) ) );
01301
01302
01303 m_prev3->setLeftBorder( m_leftBorder );
01304 m_prev3->setRightBorder( m_rightBorder );
01305 m_prev3->setTopBorder( m_topBorder );
01306 m_prev3->setBottomBorder( m_bottomBorder );
01307
01308 grid->setRowStretch( 7, 1 );
01309 grid->setColStretch( 1, 1 );
01310 }
01311
01312 void KWFrameDia::initBorderSettings()
01313 {
01314 KWFrame *f = m_mainFrame ? m_mainFrame : ( m_frame ? m_frame : m_allFrames.first() );
01315 m_leftBorder = f->leftBorder();
01316 m_rightBorder = f->rightBorder();
01317 m_topBorder = f->topBorder();
01318 m_bottomBorder = f->bottomBorder();
01319 }
01320
01321 #define OFFSETX 15
01322 #define OFFSETY 7
01323 #define Ko_SPACE 30
01324 void KWFrameDia::slotPressEvent(QMouseEvent *ev)
01325 {
01326 QRect r = m_prev3->contentsRect();
01327 QRect rect(r.x()+OFFSETX,r.y()+OFFSETY,r.width()-OFFSETX,r.y()+OFFSETY+Ko_SPACE);
01328 if(rect.contains(QPoint(ev->x(),ev->y())))
01329 {
01330 if( ( ((int)m_topBorder.penWidth() != m_cWidth->currentText().toInt()) ||(m_topBorder.color != m_bColor->color() )
01331 ||(m_topBorder.getStyle()!=KoBorder::getStyle(m_cStyle->currentText()) )) && m_bTop->isOn() )
01332 {
01333 m_topBorder.setPenWidth( m_cWidth->currentText().toInt() );
01334 m_topBorder.color = QColor( m_bColor->color() );
01335 m_topBorder.setStyle(KoBorder::getStyle(m_cStyle->currentText()));
01336 m_prev3->setTopBorder( m_topBorder );
01337 }
01338 else
01339 m_bTop->setOn(!m_bTop->isOn());
01340 }
01341 rect.setCoords(r.x()+OFFSETX,r.height()-OFFSETY-Ko_SPACE,r.width()-OFFSETX,r.height()-OFFSETY);
01342 if(rect.contains(QPoint(ev->x(),ev->y())))
01343 {
01344 if( ( ((int)m_bottomBorder.penWidth() != m_cWidth->currentText().toInt()) ||(m_bottomBorder.color != m_bColor->color() )
01345 ||(m_bottomBorder.getStyle()!=KoBorder::getStyle(m_cStyle->currentText()) )) && m_bBottom->isOn() )
01346 {
01347 m_bottomBorder.setPenWidth(m_cWidth->currentText().toInt());
01348 m_bottomBorder.color = QColor( m_bColor->color() );
01349 m_bottomBorder.setStyle(KoBorder::getStyle(m_cStyle->currentText()));
01350 m_prev3->setBottomBorder( m_bottomBorder );
01351 }
01352 else
01353 m_bBottom->setOn(!m_bBottom->isOn());
01354 }
01355
01356 rect.setCoords(r.x()+OFFSETX,r.y()+OFFSETY,r.x()+Ko_SPACE+OFFSETX,r.height()-OFFSETY);
01357 if(rect.contains(QPoint(ev->x(),ev->y())))
01358 {
01359
01360 if( ( ((int)m_leftBorder.penWidth() != m_cWidth->currentText().toInt()) ||(m_leftBorder.color != m_bColor->color() )
01361 ||(m_leftBorder.getStyle()!=KoBorder::getStyle(m_cStyle->currentText()) )) && m_bLeft->isOn() )
01362 {
01363 m_leftBorder.setPenWidth( m_cWidth->currentText().toInt());
01364 m_leftBorder.color = QColor( m_bColor->color() );
01365 m_leftBorder.setStyle(KoBorder::getStyle(m_cStyle->currentText()));
01366 m_prev3->setLeftBorder( m_leftBorder );
01367 }
01368 else
01369 m_bLeft->setOn(!m_bLeft->isOn());
01370 }
01371 rect.setCoords(r.width()-OFFSETX-Ko_SPACE,r.y()+OFFSETY,r.width()-OFFSETX,r.height()-OFFSETY);
01372 if(rect.contains(QPoint(ev->x(),ev->y())))
01373 {
01374
01375 if( ( ((int)m_rightBorder.penWidth() != m_cWidth->currentText().toInt()) ||(m_rightBorder.color != m_bColor->color() )
01376 ||(m_rightBorder.getStyle()!=KoBorder::getStyle(m_cStyle->currentText()) )) && m_bRight->isOn() )
01377 {
01378 m_rightBorder.setPenWidth( m_cWidth->currentText().toInt());
01379 m_rightBorder.color = m_bColor->color();
01380 m_rightBorder.setStyle(KoBorder::getStyle(m_cStyle->currentText()));
01381 m_prev3->setRightBorder( m_rightBorder );
01382 }
01383 else
01384 m_bRight->setOn(!m_bRight->isOn());
01385 }
01386 }
01387 #undef OFFSETX
01388 #undef OFFSETY
01389 #undef Ko_SPACE
01390
01391
01392 void KWFrameDia::brdLeftToggled( bool on )
01393 {
01394 if ( !on )
01395 m_leftBorder.setPenWidth(0);
01396 else {
01397 m_leftBorder.setPenWidth(m_cWidth->currentText().toInt());
01398 m_leftBorder.color = m_bColor->color();
01399 m_leftBorder.setStyle(KoBorder::getStyle( m_cStyle->currentText() ));
01400 }
01401 m_prev3->setLeftBorder( m_leftBorder );
01402 }
01403
01404 void KWFrameDia::brdRightToggled( bool on )
01405 {
01406 if ( !on )
01407 m_rightBorder.setPenWidth(0);
01408 else {
01409 m_rightBorder.setPenWidth(m_cWidth->currentText().toInt());
01410 m_rightBorder.color = m_bColor->color();
01411 m_rightBorder.setStyle( KoBorder::getStyle( m_cStyle->currentText() ));
01412 }
01413 m_prev3->setRightBorder( m_rightBorder );
01414 }
01415
01416 void KWFrameDia::brdTopToggled( bool on )
01417 {
01418 if ( !on )
01419 m_topBorder.setPenWidth(0);
01420 else {
01421 m_topBorder.setPenWidth(m_cWidth->currentText().toInt());
01422 m_topBorder.color = m_bColor->color();
01423 m_topBorder.setStyle(KoBorder::getStyle( m_cStyle->currentText() ));
01424 }
01425 m_prev3->setTopBorder( m_topBorder );
01426 }
01427
01428 void KWFrameDia::brdBottomToggled( bool on )
01429 {
01430 if ( !on )
01431 m_bottomBorder.setPenWidth ( 0 );
01432 else {
01433 m_bottomBorder.setPenWidth( m_cWidth->currentText().toInt());
01434 m_bottomBorder.color = m_bColor->color();
01435 m_bottomBorder.setStyle(KoBorder::getStyle(m_cStyle->currentText()));
01436 }
01437 m_prev3->setBottomBorder( m_bottomBorder );
01438 }
01439
01440 void KWFrameDia::slotProtectContentChanged( bool b )
01441 {
01442 if (m_tab4 && !m_noSignal && m_paddingConfigWidget) {
01443 m_paddingConfigWidget->setEnabled( !b );
01444 }
01445 }
01446
01447 void KWFrameDia::slotUpdateWidthForHeight(double height)
01448 {
01449 if ( !m_cbAspectRatio || m_cbAspectRatio->state() != QButton::NoChange)
01450 return;
01451 if ( m_heightByWidthRatio == 0 )
01452 return;
01453 m_sw->setValue( height / m_heightByWidthRatio );
01454
01455 }
01456
01457 void KWFrameDia::slotUpdateHeightForWidth( double width )
01458 {
01459 if ( !m_cbAspectRatio || m_cbAspectRatio->state() != QButton::NoChange)
01460 return;
01461 m_sh->setValue( width * m_heightByWidthRatio );
01462 }
01463
01464 void KWFrameDia::slotKeepRatioToggled(bool on)
01465 {
01466 if ( !on || !m_sw || !m_sh) return;
01467 calcRatio();
01468 }
01469 void KWFrameDia::ensureValidFramesetSelected()
01470 {
01471 enableButtonOK( m_rNewFrameset->isChecked() || m_rExistingFrameset->isChecked() && m_lFrameSList->selectedItem() != NULL);
01472 }
01473
01474 void KWFrameDia::calcRatio()
01475 {
01476 if ( m_sw->value() == 0 )
01477 m_heightByWidthRatio = 1.0;
01478 else
01479 m_heightByWidthRatio = m_sh->value() / m_sw->value();
01480 }
01481
01482 void KWFrameDia::initBrush()
01483 {
01484 bool allFramesSame=true;
01485 if ( m_frame )
01486 m_newBrushStyle = m_frame->backgroundColor();
01487 else {
01488 KWFrame *f=m_allFrames.first();
01489 m_newBrushStyle = f->backgroundColor();
01490 f=m_allFrames.next();
01491 while(f) {
01492 if(m_newBrushStyle != f->backgroundColor()) {
01493 allFramesSame=false;
01494 break;
01495 }
01496 f=m_allFrames.next();
01497 }
01498 m_overwriteColor->setChecked(allFramesSame);
01499 }
01500
01501 m_transparentCB->setChecked( m_newBrushStyle.style() == NoBrush );
01502
01503 #if 0
01504 switch ( m_newBrushStyle.style() )
01505 {
01506 case NoBrush:
01507 brushStyle->setCurrentItem( 0 );
01508 break;
01509 case SolidPattern:
01510 brushStyle->setCurrentItem( 1 );
01511 break;
01512 case Dense1Pattern:
01513 brushStyle->setCurrentItem( 2 );
01514 break;
01515 case Dense2Pattern:
01516 brushStyle->setCurrentItem( 3 );
01517 break;
01518 case Dense3Pattern:
01519 brushStyle->setCurrentItem( 4 );
01520 break;
01521 case Dense4Pattern:
01522 brushStyle->setCurrentItem( 5 );
01523 break;
01524 case Dense5Pattern:
01525 brushStyle->setCurrentItem( 6 );
01526 break;
01527 case Dense6Pattern:
01528 brushStyle->setCurrentItem( 7 );
01529 break;
01530 case Dense7Pattern:
01531 brushStyle->setCurrentItem( 8 );
01532 break;
01533 case HorPattern:
01534 brushStyle->setCurrentItem( 9 );
01535 break;
01536 case VerPattern:
01537 brushStyle->setCurrentItem( 10 );
01538 break;
01539 case CrossPattern:
01540 brushStyle->setCurrentItem( 11 );
01541 break;
01542 case BDiagPattern:
01543 brushStyle->setCurrentItem( 12 );
01544 break;
01545 case FDiagPattern:
01546 brushStyle->setCurrentItem( 13 );
01547 break;
01548 case DiagCrossPattern:
01549 brushStyle->setCurrentItem( 14 );
01550 break;
01551 case CustomPattern:
01552 break;
01553 }
01554 #endif
01555
01556 QColor col = KWDocument::resolveBgColor( m_newBrushStyle.color(), 0 );
01557 m_brushColor->setColor( col );
01558 }
01559
01560 QBrush KWFrameDia::frameBrushStyle() const
01561 {
01562 QBrush brush;
01563
01564 brush.setStyle( m_transparentCB->isChecked() ? NoBrush : SolidPattern );
01565
01566 #if 0
01567 switch ( brushStyle->currentItem() )
01568 {
01569 case 0:
01570 brush.setStyle( NoBrush );
01571 break;
01572 case 1:
01573 brush.setStyle( SolidPattern );
01574 break;
01575 case 2:
01576 brush.setStyle( Dense1Pattern );
01577 break;
01578 case 3:
01579 brush.setStyle( Dense2Pattern );
01580 break;
01581 case 4:
01582 brush.setStyle( Dense3Pattern );
01583 break;
01584 case 5:
01585 brush.setStyle( Dense4Pattern );
01586 break;
01587 case 6:
01588 brush.setStyle( Dense5Pattern );
01589 break;
01590 case 7:
01591 brush.setStyle( Dense6Pattern );
01592 break;
01593 case 8:
01594 brush.setStyle( Dense7Pattern );
01595 break;
01596 case 9:
01597 brush.setStyle( HorPattern );
01598 break;
01599 case 10:
01600 brush.setStyle( VerPattern );
01601 break;
01602 case 11:
01603 brush.setStyle( CrossPattern );
01604 break;
01605 case 12:
01606 brush.setStyle( BDiagPattern );
01607 break;
01608 case 13:
01609 brush.setStyle( FDiagPattern );
01610 break;
01611 case 14:
01612 brush.setStyle( DiagCrossPattern );
01613 break;
01614 }
01615 #endif
01616
01617 brush.setColor( m_brushColor->color() );
01618
01619 return brush;
01620 }
01621
01622 #if 0
01623 void KWFrameDia::updateBrushPreview()
01624 {
01625 if(brushStyle->currentItem()==0) {
01626 brushPreview->hide();
01627 } else {
01628 brushPreview->show();
01629 brushPreview->setBrush(frameBrushStyle());
01630 brushPreview->repaint(true);
01631 }
01632 }
01633 #endif
01634
01635
01636 void KWFrameDia::setFrameBehaviorInputOn() {
01637 if ( m_tab4 && m_floating->isChecked() )
01638 return;
01639 if( m_rAppendFrame && m_rResizeFrame && m_rNoShow ) {
01640 if(m_frameBehavior== KWFrame::AutoExtendFrame) {
01641 m_rResizeFrame->setChecked(true);
01642 } else if (m_frameBehavior== KWFrame::AutoCreateNewFrame) {
01643 m_rAppendFrame->setChecked(true);
01644 } else {
01645 m_rNoShow->setChecked(true);
01646 }
01647 m_rResizeFrame->setEnabled(true);
01648
01649 kdDebug() << "setFrameBehaviorInputOn: m_reconnect->isChecked()==" << m_reconnect->isChecked() << endl;
01650 m_rAppendFrame->setEnabled( m_reconnect->isChecked() );
01651 m_rNoShow->setEnabled(true);
01652 }
01653 }
01654
01655
01656 void KWFrameDia::setFrameBehaviorInputOff() {
01657 if ( m_tab4 && m_floating->isChecked() )
01658 return;
01659 if( m_rAppendFrame && m_rResizeFrame && m_rNoShow && m_rAppendFrame->isEnabled() ) {
01660 if(m_rResizeFrame->isChecked()) {
01661 m_frameBehavior=KWFrame::AutoExtendFrame;
01662 } else if ( m_rAppendFrame->isChecked()) {
01663 m_frameBehavior=KWFrame::AutoCreateNewFrame;
01664 } else {
01665 m_frameBehavior=KWFrame::Ignore;
01666 }
01667
01668 if ( m_rAppendFrame->isChecked() )
01669 m_rNoShow->setChecked(true);
01670 m_rAppendFrame->setEnabled(false);
01671 m_rResizeFrame->setEnabled(true);
01672 m_rNoShow->setEnabled(true);
01673 }
01674 }
01675
01676 void KWFrameDia::enableSizeAndPosition()
01677 {
01678 bool canMove = ( m_floating->state() == QButton::Off )
01679 && ( m_protectSize->state() == QButton::Off )
01680 && !m_defaultFrameSetIncluded
01681 && m_frame;
01682 m_sx->setEnabled( canMove );
01683 m_sy->setEnabled( canMove );
01684 bool canResize = ( m_protectSize->state() == QButton::Off )
01685 && !m_defaultFrameSetIncluded;
01686 m_sw->setEnabled( canResize );
01687 m_sh->setEnabled( canResize );
01688 }
01689
01690 void KWFrameDia::slotProtectSizeToggled(bool)
01691 {
01692 enableSizeAndPosition();
01693 }
01694
01695 void KWFrameDia::slotFloatingToggled(bool b)
01696 {
01697 enableSizeAndPosition();
01698 if (m_tab1 && m_rAppendFrame && m_rResizeFrame && m_rNoShow ) {
01699 m_cbCopy->setEnabled( !b );
01700 if ( m_rAppendFrame )
01701 {
01702 m_rAppendFrame->setEnabled( !b );
01703 if ( b && m_rAppendFrame->isChecked() )
01704 m_rNoShow->setChecked( true );
01705 }
01706 enableOnNewPageOptions();
01707 if ( b ) {
01708 m_noFollowup->setChecked( true );
01709 m_cbCopy->setChecked( false );
01710 } else {
01711
01712 m_rResizeFrame->setEnabled(true);
01713 m_rAppendFrame->setEnabled(true);
01714 m_rNoShow->setEnabled(true);
01715 }
01716 }
01717
01718 enableRunAround();
01719 }
01720
01721
01722 void KWFrameDia::enableOnNewPageOptions()
01723 {
01724 if ( m_tab1 )
01725 {
01726 bool f = m_tab4 && m_floating->isChecked();
01727
01728 m_reconnect->setEnabled( !f );
01729 m_noFollowup->setEnabled( !f );
01730 m_copyRadio->setEnabled( !f );
01731
01732 if( m_frameType != FT_TEXT )
01733 m_reconnect->setEnabled( false );
01734 else if(m_frame) {
01735 KWFrameSet *fs = m_frame->frameSet();
01736 if ( fs && (fs->isHeaderOrFooter() || fs->isFootEndNote() ))
01737 {
01738 m_reconnect->setEnabled( false );
01739 m_noFollowup->setEnabled( false );
01740 }
01741 }
01742 }
01743 }
01744
01745 void KWFrameDia::enableRunAround()
01746 {
01747 if ( m_tab2 )
01748 {
01749 if ( m_tab4 && m_floating->isChecked() ) {
01750 m_runGroup->setEnabled( false );
01751 } else
01752 {
01753 if ( m_frame && m_frame->frameSet() )
01754 m_runGroup->setEnabled( !m_frameSetFloating && !m_frame->frameSet()->isMainFrameset() && !m_frame->frameSet()->isHeaderOrFooter() && !m_frame->frameSet()->isFootEndNote() );
01755 else
01756 m_runGroup->setEnabled( true );
01757 }
01758 m_runSideGroup->setEnabled( m_runGroup->isEnabled() && m_rRunBounding->isChecked() );
01759 m_raDistConfigWidget->setEnabled( m_runGroup->isEnabled() &&
01760 ( m_rRunBounding->isChecked() || m_rRunSkip->isChecked() ) );
01761 }
01762 }
01763
01764 bool KWFrameDia::applyChanges()
01765 {
01766 kdDebug() << "KWFrameDia::applyChanges"<<endl;
01767 KWFrame *frameCopy = 0L;
01768 bool isNewFrame=false;
01769 if(m_frame) {
01770 frameCopy = m_frame->getCopy();
01771 isNewFrame = m_frame->frameSet() == 0L;
01772 }
01773 QString name=QString::null;
01774
01775 KMacroCommand * macroCmd=0L;
01776 if ( m_tab3 ) {
01777
01778
01779
01780
01781
01782
01783 name = m_eFrameSetName->text();
01784 if ( name.isEmpty() )
01785 name = m_doc->generateFramesetName( i18n( "Text Frameset %1" ) );
01786 KWFrameSet *fs = 0L;
01787 QListViewItem *frameSetItem = m_lFrameSList->selectedItem();
01788 if(frameSetItem) {
01789 QString str = frameSetItem->text( 0 );
01790 fs = m_doc->frameSet(str.toInt() - 1);
01791 }
01792 if(m_rNewFrameset->isChecked()) {
01793 if(m_frame && m_frame->frameSet()) {
01794
01795 if(! mayDeleteFrameSet( static_cast<KWTextFrameSet*>(m_frame->frameSet())))
01796 return false;
01797 m_frame->frameSet()->deleteFrame( m_frame, false );
01798 } else {
01799
01800 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next()) {
01801 if(! mayDeleteFrameSet( static_cast<KWTextFrameSet*>(f->frameSet())))
01802 return false;
01803 }
01804 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next())
01805 f->frameSet()->deleteFrame( f, false );
01806 }
01807 } else if(m_rExistingFrameset->isChecked()) {
01808 if(frameSetItem && (fs->name() != frameSetItem->text( 1 ))) {
01809 if(!macroCmd)
01810 macroCmd = new KMacroCommand( i18n("Rename Frameset") );
01811
01812 typedef KoSetPropCommand<QString, KWFrameSet, &KWFrameSet::setName> FramesetNameCommand;
01813 FramesetNameCommand* cmd = new FramesetNameCommand( fs, i18n( "Rename Frameset" ), fs->name(), frameSetItem->text( 1 ) );
01814 macroCmd->addCommand(cmd);
01815 cmd->execute();
01816 }
01817 if(m_frame && fs ) {
01818 if(m_frame->frameSet() != fs) {
01819 if(m_frame->frameSet()!=0) {
01820
01821 if(! mayDeleteFrameSet( dynamic_cast<KWTextFrameSet*>(m_frame->frameSet())))
01822 return false;
01823 m_frame->frameSet()->deleteFrame( m_frame, false );
01824 }
01825 fs->addFrame(m_frame);
01826 }
01827 } else if ( fs ){
01828
01829 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next()) {
01830 if(f->frameSet() != fs) {
01831 if(! mayDeleteFrameSet( dynamic_cast<KWTextFrameSet*>(f->frameSet())))
01832 return false;
01833 }
01834 }
01835 if ( fs )
01836 {
01837
01838 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next()) {
01839 KWFrameSet *fs2=f->frameSet();
01840 if(! (fs2->isHeaderOrFooter() || fs2->isMainFrameset()) ) {
01841 if(fs2 != fs) {
01842 f->frameSet()->deleteFrame( f, false );
01843 fs->addFrame(f);
01844 }
01845 }
01846 }
01847 }
01848 }
01849 }
01850 if(m_rNewFrameset->isChecked() || m_rExistingFrameset->isChecked()) {
01851
01852 for (QPtrListIterator<KWFrameSet> fit = m_doc->framesetsIterator(); fit.current() ; ++fit ) {
01853 if ( !fit.current()->isDeleted() &&
01854 fs != fit.current() && fit.current()->name() == name) {
01855 if ( m_rNewFrameset->isChecked() )
01856 KMessageBox::sorry( this,
01857 i18n( "A new frameset with the name '%1' "
01858 "can not be made because a frameset with that name "
01859 "already exists. Please enter another name or select "
01860 "an existing frameset from the list.").arg(name));
01861 else
01862 KMessageBox::sorry( this,
01863 i18n( "A frameset with the name '%1' "
01864 "already exists. Please enter another name." ).arg(name) );
01865 m_eFrameSetName->setText(m_oldFrameSetName);
01866 return false;
01867 }
01868 }
01869 }
01870 }
01871 if ( m_tab1 ) {
01872
01873 if(m_frame)
01874 m_frame->setCopy( m_cbCopy->isChecked() );
01875 else if(m_cbCopy->state() != QButton::NoChange) {
01876 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next()) {
01877 if(f == f->frameSet()->frame(0)) continue;
01878 f->setCopy( m_cbCopy->isChecked() );
01879 }
01880 }
01881
01882
01883 if ( m_frameType == FT_TEXT )
01884 {
01885 bool update=true;
01886 KWFrame::FrameBehavior fb=KWFrame::AutoCreateNewFrame;
01887 if(m_rResizeFrame->isChecked())
01888 fb = KWFrame::AutoExtendFrame;
01889 else if ( m_rAppendFrame->isChecked())
01890 fb = KWFrame::AutoCreateNewFrame;
01891 else if ( m_rNoShow->isChecked())
01892 fb = KWFrame::Ignore;
01893 else
01894 update=false;
01895
01896 if(m_frame)
01897 if(m_cbAllFrames->isChecked() && m_frame->frameSet())
01898 m_frame->frameSet()->setFrameBehavior(fb);
01899 else
01900 m_frame->setFrameBehavior(fb);
01901 else if(update) {
01902 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next())
01903 if(m_cbAllFrames->isChecked())
01904 f->frameSet()->setFrameBehavior(fb);
01905 else
01906 f->setFrameBehavior(fb);
01907 }
01908 if ( m_frame && m_frame->frameSet())
01909 {
01910 KWTextFrameSet * frm=static_cast<KWTextFrameSet *>( m_frame->frameSet() );
01911 if(frm->textObject()->protectContent()!=m_cbProtectContent->isChecked())
01912 {
01913 if(!macroCmd)
01914 macroCmd = new KMacroCommand( i18n("Protect Content") );
01915 KWProtectContentCommand * cmd = new KWProtectContentCommand( i18n("Protect Content"), frm,m_cbProtectContent->isChecked() );
01916 cmd->execute();
01917 macroCmd->addCommand(cmd);
01918 }
01919 }
01920 else
01921 {
01922 if ( m_cbProtectContent->state() != QButton::NoChange)
01923 {
01924 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next())
01925 {
01926 KWTextFrameSet * frm=dynamic_cast<KWTextFrameSet *>( f->frameSet() );
01927 if ( frm )
01928 {
01929 if(frm->textObject()->protectContent()!=m_cbProtectContent->isChecked())
01930 {
01931 if(!macroCmd)
01932 macroCmd = new KMacroCommand( i18n("Protect Content") );
01933 KWProtectContentCommand * cmd = new KWProtectContentCommand( i18n("Protect Content"), frm,m_cbProtectContent->isChecked() );
01934 cmd->execute();
01935 macroCmd->addCommand(cmd);
01936 }
01937 }
01938
01939 }
01940 }
01941 }
01942
01943 }
01944
01945 bool update=true;
01946 KWFrame::NewFrameBehavior nfb=KWFrame::Reconnect;
01947 if( m_reconnect && m_reconnect->isChecked() )
01948 nfb = KWFrame::Reconnect;
01949 else if ( m_noFollowup->isChecked() )
01950 nfb = KWFrame::NoFollowup;
01951 else if ( m_copyRadio->isChecked() )
01952 nfb = KWFrame::Copy;
01953 else
01954 update=false;
01955
01956 if(m_frame)
01957 if(m_cbAllFrames->isChecked() && m_frame->frameSet())
01958 m_frame->frameSet()->setNewFrameBehavior(nfb);
01959 else
01960 m_frame->setNewFrameBehavior(nfb);
01961 else if(update)
01962 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next())
01963 if(m_cbAllFrames->isChecked())
01964 f->frameSet()->setNewFrameBehavior(nfb);
01965 else
01966 f->setNewFrameBehavior(nfb);
01967
01968
01969 if ( m_cbAspectRatio && (m_frameType==FT_PICTURE))
01970 {
01971 typedef KoSetBasicPropCommand<bool, KWPictureFrameSet, &KWPictureFrameSet::setKeepAspectRatio> FramesetSetKeepAspectRatioCommand;
01972 if(m_frame) {
01973 KWPictureFrameSet * frm=static_cast<KWPictureFrameSet *>( m_frame->frameSet() );
01974 if ( frm->keepAspectRatio() != m_cbAspectRatio->isChecked() )
01975 {
01976 if(!macroCmd)
01977 macroCmd = new KMacroCommand( i18n("Frame Properties") );
01978 FramesetSetKeepAspectRatioCommand* cmd = new FramesetSetKeepAspectRatioCommand( frm, QString::null, frm->keepAspectRatio(), m_cbAspectRatio->isChecked() );
01979
01980 cmd->execute();
01981
01982 macroCmd->addCommand(cmd);
01983 }
01984 } else if(m_cbAspectRatio->state() != QButton::NoChange) {
01985 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next()) {
01986 KWPictureFrameSet *fs = dynamic_cast<KWPictureFrameSet *> (f->frameSet());
01987 if(fs) {
01988 if(fs->keepAspectRatio()!=m_cbAspectRatio->isChecked())
01989 {
01990 if(!macroCmd)
01991 macroCmd = new KMacroCommand( i18n("Frame Properties") );
01992 FramesetSetKeepAspectRatioCommand* cmd = new FramesetSetKeepAspectRatioCommand( fs, QString::null, fs->keepAspectRatio(), m_cbAspectRatio->isChecked() );
01993
01994 cmd->execute();
01995
01996 macroCmd->addCommand(cmd);
01997 }
01998 }
01999 }
02000 }
02001 }
02002 }
02003 if ( m_tab2 ) {
02004
02005 KWFrame::RunAround ra=KWFrame::RA_BOUNDINGRECT;
02006 bool update=true;
02007 if ( m_rRunNo->isChecked() )
02008 ra = KWFrame::RA_NO;
02009 else if ( m_rRunBounding->isChecked() )
02010 ra = KWFrame::RA_BOUNDINGRECT;
02011 else if ( m_rRunSkip->isChecked() )
02012 ra = KWFrame::RA_SKIP;
02013 else
02014 update=false;
02015 if(m_frame)
02016 m_frame->setRunAround(ra);
02017 else if (update) {
02018 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next())
02019 f->setRunAround(ra);
02020 }
02021
02022
02023 KWFrame::RunAroundSide rs=KWFrame::RA_BIGGEST;
02024 update=true;
02025 if ( m_rRunLeft->isChecked() )
02026 rs = KWFrame::RA_LEFT;
02027 else if ( m_rRunRight->isChecked() )
02028 rs = KWFrame::RA_RIGHT;
02029 else if ( m_rRunBiggest->isChecked() )
02030 rs = KWFrame::RA_BIGGEST;
02031 else
02032 update=false;
02033 if(m_frame)
02034 m_frame->setRunAroundSide(rs);
02035 else if (update) {
02036 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next())
02037 f->setRunAroundSide(rs);
02038 }
02039
02040
02041 double runAroundLeft = m_raDistConfigWidget->leftValue();
02042 double runAroundRight = m_raDistConfigWidget->rightValue();
02043 double runAroundTop = m_raDistConfigWidget->topValue();
02044 double runAroundBottom = m_raDistConfigWidget->bottomValue();
02045
02046 if(m_frame) {
02047 m_frame->setRunAroundGap( runAroundLeft, runAroundRight, runAroundTop, runAroundBottom );
02048 }
02049 else
02050 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next())
02051 f->setRunAroundGap( runAroundLeft, runAroundRight, runAroundTop, runAroundBottom );
02052 }
02053 if(m_tab5) {
02054 QBrush tmpBrush=frameBrushStyle();
02055 if(m_frame) {
02056 if ( tmpBrush != KWDocument::resolveBgBrush( m_frame->backgroundColor() ) ) {
02057 m_frame->setBackgroundColor(tmpBrush);
02058 }
02059 } else if(m_overwriteColor->isChecked()) {
02060 for(KWFrame *f=m_allFrames.first();f; f=m_allFrames.next())
02061 f->setBackgroundColor(tmpBrush);
02062 }
02063 }
02064
02065
02066 double px=0.0;
02067 double py=0.0;
02068 double pw=0.0;
02069 double ph=0.0;
02070 double uLeft = 0.0;
02071 double uTop = 0.0;
02072 double uBottom = 0.0;
02073 double uRight = 0.0;
02074 if(m_tab4) {
02075 if ( m_frame ) {
02076 px = QMAX( 0, m_sx->value() );
02077 int pageNum = m_doc->pageManager()->pageNumber(m_frame);
02078 py = QMAX( 0, m_sy->value() ) + m_doc->pageManager()->topOfPage(pageNum);
02079 }
02080 pw = QMAX( m_sw->value(), 0 );
02081 ph = QMAX( m_sh->value(), 0 );
02082 if ( m_paddingConfigWidget )
02083 {
02084 uLeft = m_paddingConfigWidget->leftValue();
02085 uRight = m_paddingConfigWidget->rightValue();
02086 uTop = m_paddingConfigWidget->topValue();
02087 uBottom = m_paddingConfigWidget->bottomValue();
02088 }
02089 }
02090 KoRect rect( px, py, pw, ph );
02091
02092
02093
02094
02095
02096 if(m_frame) {
02097
02098 if(m_frame->frameSet() == 0L ) {
02099 KWTextFrameSet *frameSet = new KWTextFrameSet( m_doc, name );
02100 frameSet->addFrame( m_frame );
02101 KWPage *page = m_doc->pageManager()->page(m_frame);
02102 if( page->rect().contains(rect) ) {
02103 m_frame->setRect( px, py, pw, ph );
02104
02105 if ( m_paddingConfigWidget && ( !m_tab1 || (m_tab1 && m_cbProtectContent && !m_cbProtectContent->isChecked())) )
02106 m_frame->setFramePadding( uLeft, uTop, uRight, uBottom );
02107 m_doc->frameChanged( m_frame );
02108 } else {
02109 KMessageBox::sorry( this,i18n("The frame will not be resized because the new size would be greater than the size of the page."));
02110 }
02111
02112 m_doc->addFrameSet( frameSet );
02113 if(!macroCmd)
02114 macroCmd = new KMacroCommand( i18n("Create Text Frame") );
02115 KWCreateFrameCommand *cmd=new KWCreateFrameCommand( i18n("Create Text Frame"), m_frame) ;
02116 macroCmd->addCommand(cmd);
02117 }
02118 if(!isNewFrame && (frameCopy->isCopy()!=m_frame->isCopy()
02119 || frameCopy->frameBehavior()!=m_frame->frameBehavior()
02120 || frameCopy->newFrameBehavior()!=m_frame->newFrameBehavior()
02121 || frameCopy->runAround()!=m_frame->runAround()
02122 || frameCopy->runAroundSide()!=m_frame->runAroundSide()
02123 || frameCopy->runAroundLeft()!=m_frame->runAroundLeft()
02124 || frameCopy->runAroundRight()!=m_frame->runAroundRight()
02125 || frameCopy->runAroundTop()!=m_frame->runAroundTop()
02126 || frameCopy->runAroundBottom()!=m_frame->runAroundBottom()
02127 || (m_tab5 && KWDocument::resolveBgBrush( frameCopy->backgroundColor() )!=frameBrushStyle())))
02128 {
02129 if(!macroCmd)
02130 macroCmd = new KMacroCommand( i18n("Frame Properties") );
02131
02132 KWFramePropertiesCommand*cmd = new KWFramePropertiesCommand( QString::null, frameCopy, m_frame );
02133 macroCmd->addCommand(cmd);
02134 frameCopy = 0L;
02135 } else
02136 delete frameCopy;
02137 }
02138 if ( m_tab4 ) {
02139
02140 KWFrame *f=m_allFrames.first();
02141 if(f==0L) f=m_frame;
02142 while(f) {
02143
02144 KWFrameSet * fs = f->frameSet();
02145 KWFrameSet * parentFs = fs->groupmanager() ? fs->groupmanager() : fs;
02146
02147
02148 if ( m_floating->isChecked() &&
02149 m_floating->state() != QButton::NoChange &&
02150 !parentFs->isFloating() )
02151 {
02152 if(!macroCmd)
02153 macroCmd = new KMacroCommand( i18n("Make Frameset Inline") );
02154
02155 QValueList<FrameIndex> frameindexList;
02156 QValueList<FrameMoveStruct> frameindexMove;
02157
02158 KoPoint oldPos = f->topLeft();
02159
02160
02161 KWFrameSetInlineCommand *cmd = new KWFrameSetInlineCommand( QString::null, parentFs, true );
02162 cmd->execute();
02163
02164 frameindexList.append( FrameIndex( f ) );
02165 frameindexMove.append( FrameMoveStruct( oldPos, f->topLeft() ) );
02166
02167 KWFrameMoveCommand *cmdMoveFrame = new KWFrameMoveCommand( QString::null, frameindexList, frameindexMove );
02168
02169 macroCmd->addCommand(cmdMoveFrame);
02170 macroCmd->addCommand(cmd);
02171 }
02172 else if ( !m_floating->isChecked() &&
02173 m_floating->state() != QButton::NoChange &&
02174 parentFs->isFloating() )
02175 {
02176 if(!macroCmd)
02177 macroCmd = new KMacroCommand( i18n("Make Frameset Non-Inline") );
02178
02179 KWFrameSetInlineCommand *cmd = new KWFrameSetInlineCommand( QString::null, parentFs, false );
02180 macroCmd->addCommand(cmd);
02181 cmd->execute();
02182 }
02183 if ( fs->isProtectSize() != m_protectSize->isChecked()
02184 && m_protectSize->state() != QButton::NoChange )
02185 {
02186 if(!macroCmd)
02187 macroCmd = new KMacroCommand( i18n("Protect Size") );
02188 typedef KoSetBasicPropCommand<bool, KWFrameSet, &KWFrameSet::setProtectSize> FramesetSetProtectSizeCommand;
02189 FramesetSetProtectSizeCommand* cmd = new FramesetSetProtectSizeCommand( fs, QString::null, fs->isProtectSize(), m_protectSize->isChecked() );
02190 macroCmd->addCommand(cmd);
02191 cmd->execute();
02192 m_frameSetProtectedSize = m_protectSize->isChecked();
02193 }
02194 if ( !fs->isMainFrameset() &&
02195 ( ( m_oldX != m_sx->value() && m_sx->isEnabled() )|| ( m_oldY != m_sy->value() && m_sy->isEnabled() ) || ( m_oldW != m_sw->value() && m_sw->isEnabled() ) || ( m_oldH != m_sh->value() && m_sh->isEnabled() ) ) )
02196 {
02197
02198
02199
02200
02201 if( m_doc->pageManager()->page(f)->rect().contains(rect) )
02202 {
02203 FrameIndex index( f );
02204 KoRect initialRect = f->normalize();
02205 double initialMinFrameHeight = f->minimumFrameHeight();
02206 if ( m_frame )
02207 f->setRect( px, py, pw, ph );
02208 else {
02209 f->setWidth( pw );
02210 f->setHeight( ph );
02211 }
02212 FrameResizeStruct tmpResize( initialRect, initialMinFrameHeight, f->normalize() );
02213 if(!macroCmd)
02214 macroCmd = new KMacroCommand( i18n("Resize Frame") );
02215
02216 KWFrameResizeCommand *cmd = new KWFrameResizeCommand( i18n("Resize Frame"), index, tmpResize ) ;
02217 macroCmd->addCommand(cmd);
02218 m_doc->frameChanged( f );
02219 }
02220 else
02221 {
02222 KMessageBox::sorry( this,i18n("The frame will not be resized because the new size would be greater than the size of the page."));
02223 }
02224 }
02225 if ( m_paddingConfigWidget &&
02226 (!m_tab1 || (m_tab1 && m_cbProtectContent && !m_cbProtectContent->isChecked())) &&
02227 m_paddingConfigWidget->changed() )
02228 {
02229 FrameIndex index( f );
02230 FramePaddingStruct tmpMargBegin(f);
02231 FramePaddingStruct tmpMargEnd(uLeft, uTop, uRight, uBottom);
02232 if(!macroCmd)
02233 macroCmd = new KMacroCommand( i18n("Change Margin Frame") );
02234 KWFrameChangeFramePaddingCommand *cmd = new KWFrameChangeFramePaddingCommand( i18n("Change Margin Frame"), index, tmpMargBegin, tmpMargEnd) ;
02235 cmd->execute();
02236 macroCmd->addCommand(cmd);
02237 }
02238 f=m_allFrames.next();
02239 }
02240 }
02241 if ( m_tab6 )
02242 {
02243 if ( m_mainFrame )
02244 m_allFrames.append( m_mainFrame );
02245
02246 KWFrame *f = m_allFrames.first();
02247 if(f==0L) f=m_frame;
02248 for ( ; f ; f = m_allFrames.next() )
02249 {
02250
02251 if ( f->leftBorder() != m_leftBorder )
02252 {
02253 kdDebug() << "Changing borders!" << endl;
02254 QPtrList<KWFrameBorderCommand::FrameBorderTypeStruct> tmpBorderList;
02255 QPtrList<FrameIndex> frameindexList;
02256 f = KWFrameSet::settingsFrame( f );
02257 FrameIndex *index = new FrameIndex( f );
02258 KWFrameBorderCommand::FrameBorderTypeStruct *tmp =new KWFrameBorderCommand::FrameBorderTypeStruct;
02259 tmp->m_OldBorder = f->leftBorder();
02260 tmp->m_EFrameType = KoBorder::LeftBorder;
02261 tmpBorderList.append( tmp );
02262 frameindexList.append( index );
02263 if ( !macroCmd )
02264 macroCmd = new KMacroCommand( i18n("Change Border"));
02265 KWFrameBorderCommand *cmd = new KWFrameBorderCommand(i18n("Change Left Border Frame"), frameindexList, tmpBorderList, m_leftBorder);
02266 cmd->execute();
02267 macroCmd->addCommand( cmd);
02268 }
02269 if ( f->rightBorder() != m_rightBorder )
02270 {
02271 QPtrList<KWFrameBorderCommand::FrameBorderTypeStruct> tmpBorderList;
02272 QPtrList<FrameIndex> frameindexList;
02273 f = KWFrameSet::settingsFrame( f );
02274 FrameIndex *index = new FrameIndex( f );
02275 KWFrameBorderCommand::FrameBorderTypeStruct *tmp =new KWFrameBorderCommand::FrameBorderTypeStruct;
02276 tmp->m_OldBorder = f->rightBorder();
02277 tmp->m_EFrameType = KoBorder::RightBorder;
02278 tmpBorderList.append( tmp );
02279 frameindexList.append( index );
02280 if ( !macroCmd )
02281 macroCmd = new KMacroCommand( i18n("Change Border"));
02282 KWFrameBorderCommand *cmd = new KWFrameBorderCommand(i18n("Change Right Border Frame"), frameindexList, tmpBorderList, m_rightBorder);
02283 cmd->execute();
02284 macroCmd->addCommand( cmd);
02285 }
02286 if ( f->topBorder() != m_topBorder )
02287 {
02288 QPtrList<KWFrameBorderCommand::FrameBorderTypeStruct> tmpBorderList;
02289 QPtrList<FrameIndex> frameindexList;
02290 f = KWFrameSet::settingsFrame( f );
02291 FrameIndex *index = new FrameIndex( f );
02292 KWFrameBorderCommand::FrameBorderTypeStruct *tmp =new KWFrameBorderCommand::FrameBorderTypeStruct;
02293 tmp->m_OldBorder = f->topBorder();
02294 tmp->m_EFrameType = KoBorder::TopBorder;
02295 tmpBorderList.append( tmp );
02296 frameindexList.append( index );
02297 if ( !macroCmd )
02298 macroCmd = new KMacroCommand( i18n("Change Border"));
02299 KWFrameBorderCommand *cmd = new KWFrameBorderCommand(i18n("Change Top Border Frame"), frameindexList, tmpBorderList, m_topBorder);
02300 cmd->execute();
02301 macroCmd->addCommand( cmd);
02302 }
02303 if ( f->bottomBorder() != m_bottomBorder )
02304 {
02305 QPtrList<KWFrameBorderCommand::FrameBorderTypeStruct> tmpBorderList;
02306 QPtrList<FrameIndex> frameindexList;
02307 f = KWFrameSet::settingsFrame( f );
02308 FrameIndex *index = new FrameIndex( f );
02309 KWFrameBorderCommand::FrameBorderTypeStruct *tmp =new KWFrameBorderCommand::FrameBorderTypeStruct;
02310 tmp->m_OldBorder = f->bottomBorder();
02311 tmp->m_EFrameType = KoBorder::BottomBorder;
02312 tmpBorderList.append( tmp );
02313 frameindexList.append( index );
02314 if ( !macroCmd )
02315 macroCmd = new KMacroCommand( i18n("Change Border"));
02316 KWFrameBorderCommand *cmd = new KWFrameBorderCommand(i18n("Change Bottom Border Frame"), frameindexList, tmpBorderList, m_bottomBorder);
02317 cmd->execute();
02318 macroCmd->addCommand( cmd);
02319 }
02320 }
02321 }
02322
02323 if(macroCmd)
02324 m_doc->addCommand(macroCmd);
02325
02326 updateFrames();
02327 return true;
02328 }
02329
02330 void KWFrameDia::updateFrames()
02331 {
02332 m_doc->updateAllFrames();
02333 m_doc->layout();
02334 m_doc->repaintAllViews();
02335 }
02336
02337 void KWFrameDia::slotApply()
02338 {
02339 applyChanges();
02340 if ( m_tab4 )
02341 initGeometrySettings();
02342 if ( m_tab6 )
02343 initBorderSettings();
02344 }
02345
02346 void KWFrameDia::slotOk()
02347 {
02348 if (applyChanges())
02349 {
02350 KDialogBase::slotOk();
02351 }
02352 }
02353
02354 void KWFrameDia::connectListSelected( QListViewItem *item )
02355 {
02356
02357 if ( !item )
02358 item = m_lFrameSList->selectedItem();
02359
02360 if ( !item ) return;
02361
02362 m_rExistingFrameset->setChecked(true);
02363 m_eFrameSetName->setText( item->text(1) );
02364 }
02365
02366 bool KWFrameDia::mayDeleteFrameSet(KWTextFrameSet *fs) {
02367 if(fs==0) return true;
02368 if(fs->frameCount() > 1) return true;
02369 KoTextParag * parag = fs->textDocument()->firstParag();
02370 if(parag==0) return true;
02371 bool isEmpty = parag->next() == 0L && parag->length() == 1;
02372 if ( !isEmpty ) {
02373 int result = KMessageBox::warningContinueCancel(this,
02374 i18n( "You are about to reconnect the last frame of the "
02375 "frameset '%1'. "
02376 "The contents of this frameset will be deleted.\n"
02377 "Are you sure you want to do that?").arg(fs->name()),
02378 i18n("Reconnect Frame"), i18n("&Reconnect"));
02379 if (result != KMessageBox::Continue)
02380 return false;
02381 }
02382 return true;
02383 }
02384
02385 KWFourSideConfigWidget::KWFourSideConfigWidget( KWDocument* doc, const QString& title,
02386 QWidget* parent, const char* name )
02387 : QGroupBox( title, parent, name ),
02388 m_doc( doc ),
02389 m_changed( false ), m_noSignal( false )
02390 {
02391 QGroupBox *grp2 = this;
02392 QGridLayout* mGrid = new QGridLayout( grp2, 4, 4, KDialog::marginHint(), KDialog::spacingHint() );
02393
02394 m_synchronize=new QCheckBox( i18n("Synchronize changes"), grp2 );
02395 QWhatsThis::add(m_synchronize, i18n("<b>Synchronize changes:</b><br/>"
02396 "When this is checked any change in margins will be used for all directions."));
02397 mGrid->addMultiCellWidget( m_synchronize, 1, 1, 0, 1 );
02398
02399 QLabel* lml = new QLabel( i18n( "Left:" ), grp2 );
02400
02401 mGrid->addWidget( lml, 2, 0 );
02402
02403 m_inputLeft = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, m_doc->unit() );
02404
02405 mGrid->addWidget( m_inputLeft, 2, 1 );
02406
02407 QLabel* lmt = new QLabel( i18n( "Top:" ), grp2 );
02408
02409 mGrid->addWidget( lmt, 2, 2 );
02410
02411 m_inputTop = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, m_doc->unit() );
02412
02413
02414
02415 mGrid->addWidget( m_inputTop, 2, 3 );
02416
02417 QLabel* lmr = new QLabel( i18n( "Right:" ), grp2 );
02418
02419 mGrid->addWidget( lmr, 3, 0 );
02420
02421 m_inputRight = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, m_doc->unit() );
02422
02423
02424 mGrid->addWidget( m_inputRight, 3, 1 );
02425
02426 QLabel* lmb = new QLabel( i18n( "Bottom:" ), grp2 );
02427
02428 mGrid->addWidget( lmb, 3, 2 );
02429
02430 m_inputBottom = new KoUnitDoubleSpinBox( grp2, 0, 9999, 1, 0.0, m_doc->unit() );
02431
02432
02433 mGrid->addWidget( m_inputBottom, 3, 3 );
02434 mGrid->setRowSpacing( 0, KDialog::spacingHint() + 5 );
02435
02436 connect( m_inputLeft, SIGNAL( valueChanged(double)), this, SLOT( slotValueChanged( double )));
02437 connect( m_inputRight, SIGNAL( valueChanged(double)), this, SLOT( slotValueChanged( double )));
02438 connect( m_inputTop, SIGNAL( valueChanged(double)), this, SLOT( slotValueChanged( double )));
02439 connect( m_inputBottom, SIGNAL( valueChanged(double)), this, SLOT( slotValueChanged( double )));
02440 }
02441
02442
02443 void KWFourSideConfigWidget::setValues( double left, double right, double top, double bottom )
02444 {
02445 m_inputLeft->setValue( KoUnit::toUserValue( left, m_doc->unit() ) );
02446 m_inputRight->setValue( KoUnit::toUserValue( right, m_doc->unit() ) );
02447 m_inputTop->setValue( KoUnit::toUserValue( top, m_doc->unit() ) );
02448 m_inputBottom->setValue( KoUnit::toUserValue( bottom, m_doc->unit() ) );
02449 }
02450
02451 void KWFourSideConfigWidget::slotValueChanged( double val )
02452 {
02453 m_changed = true;
02454 if ( m_synchronize->isChecked() && !m_noSignal )
02455 {
02456 m_noSignal = true;
02457 m_inputLeft->setValue( val );
02458 m_inputBottom->setValue( val );
02459 m_inputRight->setValue( val );
02460 m_inputTop->setValue( val );
02461 m_noSignal = false;
02462 }
02463 }
02464
02465 double KWFourSideConfigWidget::leftValue() const
02466 {
02467 return m_inputLeft->value();
02468 }
02469
02470 double KWFourSideConfigWidget::rightValue() const
02471 {
02472 return m_inputRight->value();
02473 }
02474
02475 double KWFourSideConfigWidget::topValue() const
02476 {
02477 return m_inputTop->value();
02478 }
02479
02480 double KWFourSideConfigWidget::bottomValue() const
02481 {
02482 return m_inputBottom->value();
02483 }
02484
02485
02486
02487
02488
02489
02490