72
87
******************************************************************/
74
89
KWFrameDia::KWFrameDia( QWidget* parent, KWFrame *_frame)
75
: KDialogBase( Tabbed, i18n("Frame settings"), Ok | Cancel, Ok, parent, "framedialog", true)
90
: KDialogBase( Tabbed, QString::null, Ok | Cancel, Ok, parent, "framedialog", true)
78
KWFrameSet * fs = frame->getFrameSet();
79
KWTableFrameSet *table = fs->getGroupManager();
81
frameType = table->type();
83
frameType = frame->getFrameSet() ? frame->getFrameSet()->type() : (FrameSetType) -1;
84
// parentFs is the table in case of a table, fs otherwise
85
KWFrameSet * parentFs = fs->getGroupManager() ? fs->getGroupManager() : fs;
86
frameSetFloating = parentFs->isFloating();
95
kdDebug() << "ERROR: KWFrameDia::constructor no frame.."<<endl;
98
setCaption( i18n( "Frame Properties for %1" ).arg( frame->frameSet()->getName() ) );
99
KWFrameSet *fs = frame->frameSet()->getGroupManager();
100
if(fs==0L) fs=frame->frameSet();
101
frameType = fs->type();
102
frameSetFloating = fs->isFloating();
103
frameSetProtectedSize = fs->isProtectSize();
91
108
/* Contructor when the dialog is used on creation of frame */
92
109
KWFrameDia::KWFrameDia( QWidget* parent, KWFrame *_frame, KWDocument *_doc, FrameSetType _ft )
93
: KDialogBase( Tabbed, i18n("Frame settings"), Ok | Cancel, Ok, parent, "framedialog", true)
110
: KDialogBase( Tabbed, i18n("Frame Properties for New Frame"), Ok | Cancel, Ok, parent, "framedialog", true)
98
116
frameSetFloating = false;
117
frameSetProtectedSize = false;
119
kdDebug() << "ERROR: KWFrameDia::constructor no frame.."<<endl;
125
KWFrameDia::KWFrameDia( QWidget *parent, QPtrList<KWFrame> listOfFrames) : KDialogBase( Tabbed, i18n("Frames Properties"), Ok | Cancel, Ok, parent, "framedialog", true) , allFrames() {
129
tab1 = tab2 = tab3 = tab4 = tab5 = 0;
131
KWFrame *f=listOfFrames.first();
133
kdDebug() << "ERROR: KWFrameDia::constructor no frames.."<<endl;
136
if ( listOfFrames.count() == 1 )
137
setCaption( i18n( "Frame Settings for %1" ).arg( f->frameSet()->getName() ) );
139
KWFrameSet *fs = f->frameSet()->getGroupManager();
140
if(fs==0L) fs=f->frameSet();
141
frameType = fs->type();
142
bool frameTypeUnset=true;
143
doc = fs->kWordDocument();
145
if( !fs->isMainFrameset() ) { // don't include the main fs.
147
frameTypeUnset=false;
149
f=listOfFrames.next();
151
fs = f->frameSet()->getGroupManager();
152
if(fs==0L) fs=f->frameSet();
153
if(doc->processingType() != KWDocument::WP || doc->frameSet(0) != fs) { // don't include the main fs.
154
if(!frameTypeUnset && frameType != fs->type()) frameType= FT_TEXT;
156
frameType = fs->type();
157
frameTypeUnset = false;
158
} else if(frameType != fs->type()) frameType= FT_TEXT;
161
f=listOfFrames.next();
163
if(allFrames.count()==0)
164
allFrames.append(listOfFrames.first());
102
169
void KWFrameDia::init() {
104
tab1 = tab2 = tab3 = tab4 = 0;
171
tab1 = tab2 = tab3 = tab4 = tab5 = 0;
176
fs = frame->frameSet(); // 0 when creating a frame
106
177
KoRect r = frame->normalize();
107
178
frame->setRect( r.x(), r.y(), r.width(), r.height() );
108
KWFrameSet *fs = frame->getFrameSet(); // 0 when creating a frame
111
doc = fs->kWordDocument();
115
kdDebug() << "ERROR: KWFrameDia::init frame has no reference to doc.."<<endl;
118
if( fs && fs->isMainFrameset() )
123
else if ( fs && fs->isHeaderOrFooter() )
129
else if(frameType == FT_TEXT)
135
if(! frame->getFrameSet()) // first creation
138
else if(frameType == FT_PICTURE || frameType == FT_CLIPART)
143
showPage(1); // while options are not implemented..
145
else if(frameType == FT_PART)
150
else if(frameType == FT_FORMULA)
155
showPage(1); // while options are not implemented..
157
else if(frameType == FT_TABLE)
160
grp1->setEnabled(false);
164
kdDebug() << "ERROR: KWFrameDia::init no frame.."<<endl;
182
doc = fs->kWordDocument();
186
kdDebug() << "ERROR: KWFrameDia::init frame has no reference to doc.."<<endl;
189
if( fs && fs->isMainFrameset() )
194
else if ( fs && (fs->isHeaderOrFooter() || fs->isFootEndNote()) )
197
if ( !fs->isMainFrameset() && !fs->isHeaderOrFooter() && !fs->isFootEndNote())
202
else if(frameType == FT_TEXT)
205
if ( fs && !fs->isMainFrameset() && !fs->isHeaderOrFooter() && !fs->isFootEndNote())
212
if(! fs) // first creation
215
else if(frameType == FT_PICTURE
216
#if 0 // KWORD_HORIZONTAL_LINE
217
|| frameType == FT_HORZLINE
222
if ( frameType == FT_PICTURE )
224
if(frame) // not for multiframe dia
226
showPage(1); // while options are not implemented..
228
else if(frameType == FT_PART)
231
if(frame) // not for multiframe dia
234
else if(frameType == FT_FORMULA)
238
if(frame) // not for multiframe dia
240
showPage(1); // while options are not implemented..
242
else if(frameType == FT_TABLE)
165
247
setInitialSize( QSize(550, 400) );
169
250
void KWFrameDia::setupTab1(){ // TAB Frame Options
170
251
//kdDebug() << "setup tab 1 Frame options"<<endl;
171
252
tab1 = addPage( i18n("Options") );
174
if(frameType == FT_FORMULA || frameType == FT_PICTURE)
254
if(frameType == FT_FORMULA || frameType == FT_PICTURE
255
#if 0 // KWORD_HORIZONTAL_LINE
256
|| frameType == FT_HORZLINE
176
260
else if(frameType == FT_TEXT)
310
476
sideAlign->setAutoResize(false);
311
477
sideAlign->insertItem ( i18n("Left"));
312
478
sideAlign->insertItem ( i18n("Right"));
313
sideAlign->insertItem ( i18n("Closest to binding"));
314
sideAlign->insertItem ( i18n("Closest to page edge"));
479
sideAlign->insertItem ( i18n("Closest to Binding"));
480
sideAlign->insertItem ( i18n("Closest to Page Edge"));
315
481
sideAlign->resize(sideAlign->sizeHint());
316
482
sideGrid->addMultiCellWidget(sideAlign,3,3,0,1);
317
483
sideGrid->addRowSpacing( 0, KDialog::marginHint() + 5 );
319
485
// init for sideheads.
320
486
sideWidth->setText("0");
321
sideWidth->setValidator( new QDoubleValidator( sideWidth) );
487
sideWidth->setValidator( new KFloatValidator(0,9999,true, sideWidth) );
323
489
sideGap->setText("0");
324
sideGap->setValidator( new QDoubleValidator( sideGap) );
490
sideGap->setValidator( new KFloatValidator(0,9999,true, sideGap) );
325
491
// add rest of sidehead init..
494
cbAllFrames = new QCheckBox (i18n("Changes will be applied to all frames in frameset"),tab1);
495
cbAllFrames->setChecked(frame!=0L);
497
grid1->addMultiCellWidget(cbAllFrames,row,row, 0, 1);
498
cbProtectContent = new QCheckBox( i18n("Protect content"), tab1);
499
QWhatsThis::add(cbProtectContent, i18n("Disallow changes to be made to the contents of the frame(s)"));
500
connect( cbProtectContent, SIGNAL(toggled ( bool ) ), this, SLOT(slotProtectContentChanged( bool )));
502
grid1->addMultiCellWidget(cbProtectContent,row,row, 0, 1);
503
if( frameType != FT_TEXT || frame!=0 && frame->frameSet()==0) {
504
cbAllFrames->setChecked(false);
506
cbProtectContent->setChecked( false );
507
cbProtectContent->hide();
509
else if ( frameType == FT_TEXT /*&& frame!=0 && frame->frameSet()*/ )
515
if ( frame->frameSet() )
516
on= static_cast<KWTextFrameSet *>(frame->frameSet() )->textObject()->protectContent();
520
KWFrame *f=allFrames.first();
521
KWTextFrameSet *fs = dynamic_cast<KWTextFrameSet *> (f->frameSet());
523
on=fs->textObject()->protectContent();
526
KWTextFrameSet *fs = dynamic_cast<KWTextFrameSet *> (f->frameSet());
529
if(on != fs->textObject()->protectContent())
538
cbProtectContent->setChecked( on );
540
cbProtectContent->setTristate();
541
cbProtectContent->setNoChange();
328
545
for(int i=0;i < row;i++)
329
546
grid1->setRowStretch( i, 0 );
330
547
grid1->setRowStretch( row + 1, 1 );
334
void KWFrameDia::setupTab2() // TAB Text Runaround
336
//kdDebug() << "setup tab 2 text runaround"<<endl;
338
tab2 = addPage( i18n( "Text run around" ) );
340
grid2 = new QGridLayout( tab2, 3, 2, KDialog::marginHint(), KDialog::spacingHint() );
342
runGroup = new QGroupBox( i18n( "Text in other frames will:" ), tab2 );
344
runGrid = new QGridLayout( runGroup, 4, 3, KDialog::marginHint(), KDialog::spacingHint() );
550
void KWFrameDia::setupTab2() { // TAB Text Runaround
551
tab2 = addPage( i18n( "Text Run Around" ) );
553
QVBoxLayout *tabLayout = new QVBoxLayout( tab2, 11, 6, "tabLayout");
556
runGroup = new QButtonGroup( i18n( "Layout of Text in Other Frames" ), tab2);
557
runGroup->setColumnLayout( 0, Qt::Vertical );
558
runGroup->layout()->setSpacing( KDialog::spacingHint() );
559
runGroup->layout()->setMargin( KDialog::marginHint() );
560
QGridLayout *groupBox1Layout = new QGridLayout( runGroup->layout() );
561
groupBox1Layout->setAlignment( Qt::AlignTop );
563
rRunNo = new QRadioButton( i18n( "Text will run &through this frame" ), runGroup );
564
groupBox1Layout->addWidget( rRunNo, 0, 1 );
566
rRunBounding = new QRadioButton( i18n( "Text will run &around the frame" ), runGroup );
567
groupBox1Layout->addWidget( rRunBounding, 1, 1 );
569
rRunSkip = new QRadioButton( i18n( "Text will ¬ run around this frame" ), runGroup );
570
groupBox1Layout->addWidget( rRunSkip, 2, 1 );
346
572
QPixmap pixmap = KWBarIcon( "run_not" );
347
lRunNo = new QLabel( runGroup );
573
QLabel *lRunNo = new QLabel( runGroup );
348
574
lRunNo->setBackgroundPixmap( pixmap );
349
575
lRunNo->setFixedSize( pixmap.size() );
350
runGrid->addWidget( lRunNo, 1, 0 );
351
runGrid->addColSpacing( 0, pixmap.width());
576
groupBox1Layout->addWidget( lRunNo, 0, 0 );
353
578
pixmap = KWBarIcon( "run_bounding" );
354
lRunBounding = new QLabel( runGroup );
579
QLabel *lRunBounding = new QLabel( runGroup );
355
580
lRunBounding->setBackgroundPixmap( pixmap );
356
581
lRunBounding->setFixedSize( pixmap.size() );
357
runGrid->addWidget( lRunBounding, 2, 0 );
582
groupBox1Layout->addWidget( lRunBounding, 1, 0 );
359
584
pixmap = KWBarIcon( "run_skip" );
360
lRunContur = new QLabel( runGroup );
361
lRunContur->setBackgroundPixmap( pixmap );
362
lRunContur->setFixedSize( pixmap.size() );
363
runGrid->addWidget( lRunContur, 3, 0 );
365
rRunNo = new QRadioButton( i18n( "&Run through this frame" ), runGroup );
366
runGrid->addWidget( rRunNo, 1, 1 );
367
connect( rRunNo, SIGNAL( clicked() ), this, SLOT( runNoClicked() ) );
369
rRunBounding = new QRadioButton( i18n( "Run around the &boundary rectangle of this frame" ), runGroup );
370
runGrid->addWidget( rRunBounding, 2, 1 );
371
connect( rRunBounding, SIGNAL( clicked() ), this, SLOT( runBoundingClicked() ) );
373
rRunContur = new QRadioButton( i18n( "Do&n't run around this frame" ), runGroup );
374
runGrid->addWidget( rRunContur, 3, 1 );
375
connect( rRunContur, SIGNAL( clicked() ), this, SLOT( runConturClicked() ) );
377
runGrid->addRowSpacing( 0, KDialog::marginHint() + 5 );
379
grid2->addWidget( runGroup, 0, 0 );
380
grid2->addMultiCellWidget( runGroup, 0, 0, 0, 1 );
382
lRGap = new QLabel( i18n( "Run around gap (%1):" ).arg(doc->getUnitName()), tab2 );
383
lRGap->resize( lRGap->sizeHint() );
384
lRGap->setAlignment( AlignRight | AlignVCenter );
385
grid2->addWidget( lRGap, 1, 0 );
387
eRGap = new QLineEdit( tab2 );
388
eRGap->setValidator( new QDoubleValidator( eRGap ) );
389
eRGap->setText( "0.00" );
390
eRGap->setMaxLength( 5 );
391
eRGap->setEchoMode( QLineEdit::Normal );
392
eRGap->setFrame( true );
393
eRGap->resize( eRGap->sizeHint() );
394
grid2->addWidget( eRGap, 1, 1 );
396
eRGap->setEnabled( false ); // ### not implemented currently
585
QLabel *lRunSkip = new QLabel( runGroup );
586
lRunSkip->setBackgroundPixmap( pixmap );
587
lRunSkip->setFixedSize( pixmap.size() );
588
groupBox1Layout->addWidget( lRunSkip, 2, 0 );
590
tabLayout->addWidget( runGroup );
593
runSideGroup = new QButtonGroup( i18n( "Run Around Side" ), tab2);
594
runSideGroup->setColumnLayout( 0, Qt::Vertical );
595
runSideGroup->layout()->setSpacing( KDialog::spacingHint() );
596
runSideGroup->layout()->setMargin( KDialog::marginHint() );
597
QGridLayout *runSideLayout = new QGridLayout( runSideGroup->layout() );
598
runSideLayout->setAlignment( Qt::AlignTop );
600
rRunLeft = new QRadioButton( i18n( "Run Around", "&Left" ), runSideGroup );
601
runSideLayout->addWidget( rRunLeft, 0, 0 /*1*/ );
603
rRunRight = new QRadioButton( i18n( "Run Around", "&Right" ), runSideGroup );
604
runSideLayout->addWidget( rRunRight, 1, 0 /*1*/ );
606
rRunBiggest = new QRadioButton( i18n( "Run Around", "Lon&gest side" ), runSideGroup );
607
runSideLayout->addWidget( rRunBiggest, 2, 0 /*1*/ );
610
QPixmap pixmap = KWBarIcon( "run_left" );
611
QLabel *label = new QLabel( runSideGroup );
612
label->setBackgroundPixmap( pixmap );
613
label->setFixedSize( pixmap.size() );
614
runSideLayout->addWidget( label, 0, 0 );
616
pixmap = KWBarIcon( "run_right" );
617
label = new QLabel( runSideGroup );
618
label->setBackgroundPixmap( pixmap );
619
label->setFixedSize( pixmap.size() );
620
runSideLayout->addWidget( label, 1, 0 );
622
pixmap = KWBarIcon( "run_biggest" );
623
label = new QLabel( runSideGroup );
624
label->setBackgroundPixmap( pixmap );
625
label->setFixedSize( pixmap.size() );
626
runSideLayout->addWidget( label, 2, 0 );
629
tabLayout->addWidget( runSideGroup );
632
QHBoxLayout *Layout1 = new QHBoxLayout( 0, 0, 6);
633
QSpacerItem* spacer = new QSpacerItem( 10, 10, QSizePolicy::Expanding, QSizePolicy::Minimum );
634
Layout1->addItem( spacer );
636
QLabel *lRGap = new QLabel( i18n( "Distance between frame and text (%1):" ).arg(doc->getUnitName()), tab2 );
637
Layout1->addWidget( lRGap );
639
eRGap = new KDoubleNumInput( tab2 );
640
eRGap->setValue( 0.0 );
641
eRGap->setRange(0, 9999, 1, false);
642
eRGap->setMinimumWidth ( 100 );
643
Layout1->addWidget( eRGap );
644
tabLayout->addLayout( Layout1 );
645
QSpacerItem* spacer_2 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
646
tabLayout->addItem( spacer_2 );
649
// Show current settings
398
653
KWFrame::RunAround ra = KWFrame::RA_NO;
400
655
ra = frame->runAround();
403
KWFrame *firstFrame = doc->getFirstSelectedFrame();
405
ra = firstFrame->runAround();
409
case KWFrame::RA_NO: rRunNo->setChecked( true );
411
case KWFrame::RA_BOUNDINGRECT: rRunBounding->setChecked( true );
413
case KWFrame::RA_SKIP: rRunContur->setChecked( true );
657
KWFrame *f=allFrames.first();
661
if(ra != f->runAround()) show=false;
668
case KWFrame::RA_NO: rRunNo->setChecked( true ); break;
669
case KWFrame::RA_BOUNDINGRECT: rRunBounding->setChecked( true ); break;
670
case KWFrame::RA_SKIP: rRunSkip->setChecked( true ); break;
676
KWFrame::RunAroundSide rs = KWFrame::RA_BIGGEST;
678
rs = frame->runAroundSide();
680
KWFrame *f=allFrames.first();
681
rs = f->runAroundSide();
682
f = allFrames.next();
684
if(rs != f->runAroundSide()) show=false;
691
case KWFrame::RA_LEFT: rRunLeft->setChecked( true ); break;
692
case KWFrame::RA_RIGHT: rRunRight->setChecked( true ); break;
693
case KWFrame::RA_BIGGEST: rRunBiggest->setChecked( true ); break;
417
699
double ragap = 0;
419
701
ragap = frame->runAroundGap();
422
KWFrame *firstFrame = doc->getFirstSelectedFrame();
424
ragap = firstFrame->runAroundGap();
703
KWFrame *f=allFrames.first();
704
ragap = f->runAroundGap();
707
if(ragap != f->runAroundGap()) show=false;
428
str.setNum( KWUnit::userValue( ragap, doc->getUnit() ) );
429
eRGap->setText( str );
714
str = KoUnit::ptToUnit( ragap, doc->getUnit() );
715
eRGap->setValue( str );
431
718
enableRunAround();
433
//kdDebug() << "setup tab 2 exit"<<endl;
720
// Changing the type of runaround needs to enable/disable the runaround-side options
721
connect( runGroup, SIGNAL( clicked(int) ), this, SLOT( enableRunAround() ) );
436
724
void KWFrameDia::setupTab3(){ // TAB Frameset
438
726
* here the user can select from the current TEXT framesets, a new one is
439
727
* included in the list.
440
* Afterwards (on ok) the frame should be checked if it is allready owned by a
728
* Afterwards (on ok) the frame should be checked if it is already owned by a
441
729
* frameset, if so that connection must be disconnected (if different) and
442
730
* framebehaviour will be copied from the frameset
443
731
* then the new connection should be made.
445
733
//kdDebug() << "setup tab 3 frameSet"<<endl;
446
tab3 = addPage( i18n( "Connect text frames" ) );
448
grid3 = new QGridLayout( tab3, 3, 1, KDialog::marginHint(), KDialog::spacingHint() );
450
lFrameSet = new QLabel( i18n( "Choose a frameset to which the current frame should be connected:" ), tab3 );
451
lFrameSet->resize( lFrameSet->sizeHint() );
452
grid3->addWidget( lFrameSet, 0, 0 );
454
lFrameSList = new QListView( tab3 );
455
lFrameSList->addColumn( i18n( "Nr." ) );
456
lFrameSList->addColumn( i18n( "Frameset name" ) );
734
tab3 = addPage( i18n( "Connect Text Frames" ) );
736
QVBoxLayout *tabLayout = new QVBoxLayout( tab3, 11, 6);
738
QButtonGroup *myGroup = new QButtonGroup(this);
741
rExistingFrameset = new QRadioButton( tab3, "rExistingFrameset" );
742
rExistingFrameset->setText( i18n("Select existing frameset to connect frame to:") );
743
tabLayout->addWidget( rExistingFrameset );
744
myGroup->insert(rExistingFrameset,1);
745
connect (rExistingFrameset, SIGNAL( toggled(bool)), this, SLOT(ensureValidFramesetSelected()));
747
QHBoxLayout *layout2 = new QHBoxLayout( 0, 0, 6);
748
QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
749
layout2->addItem( spacer );
751
lFrameSList = new QListView( tab3, "lFrameSList" );
752
lFrameSList->addColumn( i18n("No.") );
753
lFrameSList->addColumn( i18n("Frameset Name") );
457
754
lFrameSList->setAllColumnsShowFocus( true );
458
755
lFrameSList->header()->setMovingEnabled( false );
756
connect( lFrameSList, SIGNAL(selectionChanged ()),this,SLOT(selectExistingFrameset ()) );
757
connect (lFrameSList, SIGNAL( selectionChanged()), this, SLOT(ensureValidFramesetSelected()));
759
layout2->addWidget( lFrameSList );
760
tabLayout->addLayout( layout2 );
762
rNewFrameset = new QRadioButton( tab3);
763
rNewFrameset->setText( i18n( "Create a new frameset" ) );
764
tabLayout->addWidget( rNewFrameset );
765
myGroup->insert(rNewFrameset,2);
767
QFrame *line1 = new QFrame( tab3 );
768
line1->setProperty( "frameShape", (int)QFrame::HLine );
769
line1->setFrameShadow( QFrame::Plain );
770
line1->setFrameShape( QFrame::HLine );
771
tabLayout->addWidget( line1 );
773
QHBoxLayout *layout1 = new QHBoxLayout( 0, 0, 6 );
774
QLabel *textLabel1 = new QLabel( tab3 );
775
textLabel1->setText( i18n( "Name of frameset:" ) );
776
layout1->addWidget( textLabel1 );
778
eFrameSetName = new QLineEdit( tab3 );
779
layout1->addWidget( eFrameSetName );
780
tabLayout->addLayout( layout1 );
460
784
for ( unsigned int i = 0; i < doc->getNumFrameSets(); i++ ) {
461
KWFrameSet * fs = doc->getFrameSet( i );
785
KWFrameSet * fs = doc->frameSet( i );
462
786
if ( i == 0 && doc->processingType() == KWDocument::WP )
464
788
if ( fs->type() != FT_TEXT || fs->isHeaderOrFooter() )
790
if ( fs->frameSetInfo() == KWFrameSet::FI_FOOTNOTE )
466
792
if ( fs->getGroupManager() )
468
if ( fs->getNumFrames() == 0 ) // deleted frameset
794
if ( fs->isDeleted() )
470
796
QListViewItem *item = new QListViewItem( lFrameSList );
471
797
item->setText( 0, QString( "%1" ).arg( i + 1 ) );
472
798
item->setText( 1, fs->getName() );
473
if( frame->getFrameSet() == fs )
800
if( frame && frame->frameSet() == fs ) {
474
801
lFrameSList->setSelected(item, TRUE );
477
if (! frame->getFrameSet()) {
478
QListViewItem *item = new QListViewItem( lFrameSList );
479
item->setText( 0, QString( "*%1" ).arg( doc->getNumFrameSets()+1 ) );
480
item->setText( 1, i18n( "Create a new frameset with this frame" ) );
481
lFrameSList->setSelected( lFrameSList->firstChild(), TRUE );
802
oldFrameSetName = fs->getName();
803
rExistingFrameset->setChecked(true);
807
rNewFrameset->setChecked(/*true*/false);
808
rNewFrameset->setEnabled(false);
809
rExistingFrameset->setEnabled(false);
810
lFrameSList->setEnabled(false);
812
//we can't create a new frame when we select
814
if ( allFrames.count() > 1 ) {
815
rNewFrameset->setChecked(false);
816
rNewFrameset->setEnabled(false);
817
myGroup->setRadioButtonExclusive( false );
819
if(frame && frame->frameSet() == 0) {
820
oldFrameSetName = doc->generateFramesetName( i18n( "Text Frameset %1" ) );
821
rNewFrameset->setChecked(true);
823
eFrameSetName->setText( oldFrameSetName );
484
825
connect( lFrameSList, SIGNAL( currentChanged( QListViewItem * ) ),
485
826
this, SLOT( connectListSelected( QListViewItem * ) ) );
486
grid3->addWidget( lFrameSList, 1, 0 );
488
QHBox *row = new QHBox( tab3 );
489
row->setSpacing( 5 );
490
if (! frame->getFrameSet())
492
( void )new QLabel( i18n( "Name of new frameset:" ), row );
493
oldFrameSetName = doc->generateFramesetName( i18n( "Text Frameset %1" ) );
497
( void )new QLabel( i18n( "Name of frameset:" ), row );
498
oldFrameSetName = frame->getFrameSet()->getName();
500
eFrameSetName = new QLineEdit( row );
501
eFrameSetName->setText( oldFrameSetName );
502
connect(eFrameSetName, SIGNAL(textChanged ( const QString & )),this,SLOT(textNameFrameChanged ( const QString & )));
504
grid3->addWidget( row, 2, 0 );
506
connectListSelected( lFrameSList->firstChild() );
827
connect(eFrameSetName, SIGNAL(textChanged ( const QString & ) ),
828
this,SLOT(textNameFrameChanged ( const QString & ) ) );
829
connect(eFrameSetName, SIGNAL(textChanged ( const QString & )),
830
this,SLOT(textNameFrameChanged ( const QString & ) ));
831
connect( rNewFrameset, SIGNAL(toggled (bool)),
832
this,SLOT(selectNewFrameset (bool)) );
835
void KWFrameDia::selectExistingFrameset() {
836
rExistingFrameset->setChecked(true);
839
void KWFrameDia::selectNewFrameset(bool on) {
842
QListViewItem *frameSetItem = lFrameSList->selectedItem();
845
QString str = frameSetItem->text( 0 );
846
KWFrameSet *fs = doc->frameSet(str.toInt() - 1);
848
frameSetItem->setText(1, fs->getName() );
509
851
void KWFrameDia::textNameFrameChanged ( const QString &text )
511
enableButtonOK( !text.isEmpty() );
853
if(rExistingFrameset->isChecked()) {
854
QListViewItem *item = lFrameSList->selectedItem();
857
item->setText(1, text );
859
if(rNewFrameset->isChecked() || rExistingFrameset->isChecked()) //when one of both is clicked.
860
enableButtonOK( !text.isEmpty() );
862
enableButtonOK( true );
514
void KWFrameDia::setupTab4(){ // TAB Geometry
515
//kdDebug() << "setup tab 4 geometry"<<endl;
865
void KWFrameDia::setupTab4() { // TAB Geometry
517
868
tab4 = addPage( i18n( "Geometry" ) );
518
869
grid4 = new QGridLayout( tab4, 4, 1, KDialog::marginHint(), KDialog::spacingHint() );
576
927
lw->resize( lw->sizeHint() );
577
928
pGrid->addWidget( lw, 3, 0 );
579
sw = new QLineEdit( grp1 );
930
sw = new KDoubleNumInput( grp1 );
581
sw->setText( "0.00" );
582
sw->setMaxLength( 16 );
583
sw->setEchoMode( QLineEdit::Normal );
584
sw->setFrame( true );
585
933
sw->resize( sw->sizeHint() );
934
sw->setRange(0, 9999, 1, false);
935
connect( sw, SIGNAL(valueChanged(double)),
936
this, SLOT(slotUpdateHeightForWidth(double)) );
586
938
pGrid->addWidget( sw, 4, 0 );
588
940
lh = new QLabel( i18n( "Height:" ), grp1 );
589
941
lh->resize( lh->sizeHint() );
590
942
pGrid->addWidget( lh, 3, 1 );
592
sh = new QLineEdit( grp1 );
944
sh = new KDoubleNumInput( grp1 );
945
connect( sh, SIGNAL(valueChanged(double)),
946
this, SLOT(slotUpdateWidthForHeight(double)) );
594
sh->setText( "0.00" );
595
sh->setMaxLength( 16 );
596
sh->setEchoMode( QLineEdit::Normal );
597
sh->setFrame( true );
598
949
sh->resize( sh->sizeHint() );
950
sh->setRange(0, 9999, 1, false);
599
952
pGrid->addWidget( sh, 4, 1 );
601
954
pGrid->addRowSpacing( 0, KDialog::spacingHint() + 5 );
603
grid4->addWidget( grp1, ++row, 0 );
605
grp2 = new QGroupBox( i18n("Margins in %1").arg(doc->getUnitName()), tab4 );
606
mGrid = new QGridLayout( grp2, 5, 2, KDialog::marginHint(), KDialog::spacingHint() );
608
lml = new QLabel( i18n( "Left:" ), grp2 );
609
lml->resize( lml->sizeHint() );
610
mGrid->addWidget( lml, 1, 0 );
612
sml = new QLineEdit( grp2 );
614
sml->setText( "0.00" );
615
sml->setMaxLength( 5 );
616
sml->setEchoMode( QLineEdit::Normal );
617
sml->setFrame( true );
618
sml->resize( sml->sizeHint() );
619
mGrid->addWidget( sml, 2, 0 );
621
lmr = new QLabel( i18n( "Right:" ), grp2 );
622
lmr->resize( lmr->sizeHint() );
623
mGrid->addWidget( lmr, 1, 1 );
625
smr = new QLineEdit( grp2 );
627
smr->setText( "0.00" );
628
smr->setMaxLength( 5 );
629
smr->setEchoMode( QLineEdit::Normal );
630
smr->setFrame( true );
631
smr->resize( smr->sizeHint() );
632
mGrid->addWidget( smr, 2, 1 );
634
lmt = new QLabel( i18n( "Top:" ), grp2 );
635
lmt->resize( lmt->sizeHint() );
636
mGrid->addWidget( lmt, 3, 0 );
638
smt = new QLineEdit( grp2 );
640
smt->setText( "0.00" );
641
smt->setMaxLength( 5 );
642
smt->setEchoMode( QLineEdit::Normal );
643
smt->setFrame( true );
644
smt->resize( smt->sizeHint() );
645
mGrid->addWidget( smt, 4, 0 );
647
lmb = new QLabel( i18n( "Bottom:" ), grp2 );
648
lmb->resize( lmb->sizeHint() );
649
mGrid->addWidget( lmb, 3, 1 );
651
smb = new QLineEdit( grp2 );
653
smb->setText( "0.00" );
654
smb->setMaxLength( 5 );
655
smb->setEchoMode( QLineEdit::Normal );
656
smb->setFrame( true );
657
smb->resize( smb->sizeHint() );
658
mGrid->addWidget( smb, 4, 1 );
660
//// ### frame margins are currently not implemented
661
sml->setEnabled( false );
662
smr->setEnabled( false );
663
smt->setEnabled( false );
664
smb->setEnabled( false );
665
// margins are not implemented yet
668
mGrid->addRowSpacing( 0, KDialog::spacingHint() + 5 );
670
/// ##### grid4->addWidget( grp2, ++row, 0 );
673
doc->getFrameMargins( l, r, t, b );
674
sml->setText( QString::number( QMAX(0.00,KWUnit::userValue( l, doc->getUnit() ) ) ));
675
smr->setText( QString::number( QMAX(0.00,KWUnit::userValue( r, doc->getUnit() ) ) ));
676
smt->setText( QString::number( QMAX(0.00,KWUnit::userValue( t, doc->getUnit() ) ) ));
677
smb->setText( QString::number( QMAX(0.00,KWUnit::userValue( b, doc->getUnit() ) ) ));
679
sx->setValidator( new QDoubleValidator( sx ) );
680
sy->setValidator( new QDoubleValidator( sy ) );
681
smb->setValidator( new QDoubleValidator( smb ) );
682
sml->setValidator( new QDoubleValidator( sml ) );
683
smr->setValidator( new QDoubleValidator( smr ) );
684
smt->setValidator( new QDoubleValidator( smt ) );
685
sh->setValidator( new QDoubleValidator( sh ) );
686
sw->setValidator( new QDoubleValidator( sw ) );
688
bool disable = false;
689
if ( doc->isOnlyOneFrameSelected() )
957
grid4->addMultiCellWidget( grp1, row, row, 0,1 );
960
QGroupBox *grp2 = new QGroupBox( i18n("Margins (%1)").arg(doc->getUnitName()), tab4 );
961
mGrid = new QGridLayout( grp2, 6, 2, KDialog::marginHint(), KDialog::spacingHint() );
963
synchronize=new QCheckBox( i18n("Synchronize changes"), grp2 );
964
QWhatsThis::add(synchronize, i18n("When this is checked any change in margins will be used for all directions"));
965
mGrid->addMultiCellWidget( synchronize, 1, 1, 0, 1);
967
lml = new QLabel( i18n( "Left:" ), grp2 );
968
lml->resize( lml->sizeHint() );
969
mGrid->addWidget( lml, 2, 0 );
971
m_inputLeftMargin = new KDoubleNumInput( grp2 );
973
m_inputLeftMargin->setValue( KoUnit::ptToUnit( QMAX(0.00, frame->bLeft()), doc->getUnit() ) );
974
m_inputLeftMargin->setRange(0, 9999, 1, false);
975
m_inputLeftMargin->resize( m_inputLeftMargin->sizeHint() );
976
mGrid->addWidget( m_inputLeftMargin, 3, 0 );
978
lmr = new QLabel( i18n( "Right:" ), grp2 );
979
lmr->resize( lmr->sizeHint() );
980
mGrid->addWidget( lmr, 2, 1 );
982
m_inputRightMargin = new KDoubleNumInput( grp2 );
984
m_inputRightMargin->setValue( KoUnit::ptToUnit( QMAX(0.00, frame->bRight()), doc->getUnit() ) );
985
m_inputRightMargin->resize( m_inputRightMargin->sizeHint() );
986
m_inputRightMargin->setRange(0, 9999, 1, false);
987
mGrid->addWidget( m_inputRightMargin, 3, 1 );
989
lmt = new QLabel( i18n( "Top:" ), grp2 );
990
lmt->resize( lmt->sizeHint() );
991
mGrid->addWidget( lmt, 4, 0 );
993
m_inputTopMargin = new KDoubleNumInput( grp2 );
995
m_inputTopMargin->setValue( KoUnit::ptToUnit( QMAX(0.00, frame->bTop()), doc->getUnit() ) );
996
m_inputTopMargin->resize( m_inputTopMargin->sizeHint() );
997
m_inputTopMargin->setRange(0, 9999, 1, false);
999
mGrid->addWidget( m_inputTopMargin, 5, 0 );
1001
lmb = new QLabel( i18n( "Bottom:" ), grp2 );
1002
lmb->resize( lmb->sizeHint() );
1003
mGrid->addWidget( lmb, 4, 1 );
1005
m_inputBottomMargin = new KDoubleNumInput( grp2 );
1007
m_inputBottomMargin->setValue( KoUnit::ptToUnit( QMAX(0.00, frame->bBottom()), doc->getUnit() ) );
1008
m_inputBottomMargin->resize( m_inputBottomMargin->sizeHint() );
1009
m_inputBottomMargin->setRange(0, 9999, 1, false);
1010
mGrid->addWidget( m_inputBottomMargin, 5, 1 );
1013
oldMarginLeft=m_inputLeftMargin->value();
1014
oldMarginRight=m_inputRightMargin->value();
1015
oldMarginTop=m_inputTopMargin->value();
1016
oldMarginBottom=m_inputBottomMargin->value();
1018
connect( m_inputBottomMargin, SIGNAL( valueChanged(double)), this, SLOT( slotMarginsChanged( double )));
1019
connect( m_inputLeftMargin, SIGNAL( valueChanged(double)), this, SLOT( slotMarginsChanged( double )));
1020
connect( m_inputRightMargin, SIGNAL( valueChanged(double)), this, SLOT( slotMarginsChanged( double )));
1021
connect( m_inputTopMargin, SIGNAL( valueChanged(double)), this, SLOT( slotMarginsChanged( double )));
1023
grid4->addMultiCellWidget( grp2, row, row, 0,1 );
1024
mGrid->addRowSpacing( 0, KDialog::spacingHint() + 5 );
1026
if (tab1 && cbProtectContent )
1028
bool state = !cbProtectContent->isChecked();
1029
m_inputBottomMargin->setEnabled( state );
1030
m_inputRightMargin->setEnabled( state );
1031
m_inputTopMargin->setEnabled( state );
1032
m_inputLeftMargin->setEnabled( state );
1033
synchronize->setEnabled( state );
691
KWFrame * theFrame = doc->getFirstSelectedFrame();
693
oldX = KWUnit::userValue( theFrame->x(), doc->getUnit() );
694
oldY = KWUnit::userValue( (theFrame->y() - (theFrame->pageNum() * doc->ptPaperHeight())), doc->getUnit() );
695
oldW = KWUnit::userValue( theFrame->width(), doc->getUnit() );
696
oldH = KWUnit::userValue( theFrame->height(), doc->getUnit() );
698
sx->setText( QString::number( oldX ) );
699
sy->setText( QString::number( oldY ) );
700
sw->setText( QString::number( oldW ) );
701
sh->setText( QString::number( oldH ) );
703
// QString::number leads to some rounding !
704
oldX = sx->text().toDouble();
705
oldY = sy->text().toDouble();
706
oldW = sw->text().toDouble();
707
oldH = sh->text().toDouble();
709
if ( theFrame->getFrameSet()->getGroupManager() )
1038
m_inputLeftMargin = 0L;
1039
m_inputRightMargin = 0L;
1040
m_inputTopMargin = 0L;
1041
m_inputBottomMargin = 0L;
1045
bool isMainFrame = false;
1047
// is single frame dia. Fill position strings and checkboxes now.
1049
// Can't use frame->pageNum() here since frameset might be 0
1050
int pageNum = QMIN( static_cast<int>(frame->y() / doc->ptPaperHeight()), doc->numPages()-1 );
1052
sx->setValue( KoUnit::ptToUnit( frame->x(), doc->getUnit() ) );
1053
sy->setValue( KoUnit::ptToUnit( frame->y() - (pageNum * doc->ptPaperHeight()), doc->getUnit() ) );
1054
sw->setValue( KoUnit::ptToUnit( frame->width(), doc->getUnit() ) );
1055
sh->setValue( KoUnit::ptToUnit( frame->height(), doc->getUnit() ) );
1059
// userValue leads to some rounding -> store old values from the ones
1060
// displayed, so that the "change detection" in apply() works.
1066
KWFrameSet * fs = frame->frameSet();
1067
// Can't change geometry of main WP frame or headers/footers
1068
if ( fs && fs->isMainFrameset() )
1071
if ( fs && fs->getGroupManager() )
710
1072
floating->setText( i18n( "Table is inline" ) );
712
1074
floating->setChecked( frameSetFloating );
714
if ( frameSetFloating )
715
slotFloatingToggled( true );
717
// Can't change geometry of main WP frame or headers/footers
718
if ( theFrame->getFrameSet()->isHeaderOrFooter() ||
719
theFrame->getFrameSet()->isMainFrameset() )
1075
protectSize->setChecked( frameSetProtectedSize);
1077
// multi frame. Fill inline and protect checkbox, leave away the position strings.
1078
KWFrame *f=allFrames.first();
1079
KWFrameSet *fs=f->frameSet();
1080
bool ps=fs->isProtectSize();
1081
protectSize->setChecked( ps );
1083
if ( fs->isMainFrameset() ) {
1087
bool table=fs->getGroupManager();
1089
fs=fs->getGroupManager();
1090
bool inlineframe =fs->isFloating();
1091
floating->setChecked( inlineframe );
1095
KWFrameSet *fs=f->frameSet();
1096
if(ps != fs->isProtectSize()) {
1097
protectSize->setTristate();
1098
protectSize->setNoChange();
1100
if ( fs->isMainFrameset() ) {
1103
if(fs->getGroupManager()) //table
1104
fs=fs->getGroupManager();
1108
if(inlineframe != fs->isFloating()) {
1109
floating->setTristate();
1110
floating->setNoChange();
1116
floating->setText( i18n( "Table is inline" ) );
1119
if ( !frame || frame->frameSet() && ( frame->frameSet()->isHeaderOrFooter() ||
1120
isMainFrame || frame->frameSet()->isFootEndNote())) {
1121
// is multi frame, positions don't work for that..
1122
// also not for default frames.
728
1123
sx->setEnabled( false );
729
1124
sy->setEnabled( false );
730
1125
sw->setEnabled( false );
731
1126
sh->setEnabled( false );
1127
lx->setEnabled( false );
1128
ly->setEnabled( false );
1129
lw->setEnabled( false );
1130
lh->setEnabled( false );
1131
grp1->setEnabled( false );
732
1132
floating->setEnabled( false );
735
//kdDebug() << "setup tab 4 exit"<<endl;
741
void KWFrameDia::uncheckAllRuns()
743
rRunNo->setChecked( false );
744
rRunBounding->setChecked( false );
745
rRunContur->setChecked( false );
748
void KWFrameDia::runNoClicked()
751
rRunNo->setChecked( true );
754
void KWFrameDia::runBoundingClicked()
757
rRunBounding->setChecked( true );
760
void KWFrameDia::runConturClicked()
764
rRunContur->setChecked( true );
1133
protectSize->setEnabled( false );
1140
protectSize->hide();
1145
void KWFrameDia::setupTab5() { // Tab Background fill/color
1146
tab5 = addPage( i18n("Background") );
1147
grid5 = new QGridLayout( tab5, (frame?6:7), 2, KDialog::marginHint(), KDialog::spacingHint() );
1151
overwriteColor = new QCheckBox (i18n("Set new color on all selected frames"), tab5);
1152
grid5->addMultiCellWidget(overwriteColor,row,row,0,1);
1155
brushPreview=new KWBrushStylePreview(tab5);
1156
grid5->addMultiCellWidget(brushPreview,row,5,1,1);
1158
QLabel *l = new QLabel( i18n( "Background color:" ), tab5 );
1160
grid5->addWidget(l,row++,0);
1162
brushColor = new KColorButton( Qt::white, tab5 );
1163
grid5->addWidget(brushColor,row++,0);
1165
connect( brushColor, SIGNAL( changed( const QColor & ) ),
1166
this, SLOT( updateBrushConfiguration() ) );
1169
l = new QLabel( i18n( "Background style:" ), tab5 );
1170
grid5->addWidget(l,row++,0);
1172
brushStyle = new QComboBox( false,tab5, "BStyle" );
1173
grid5->addWidget(brushStyle,row++,0);
1175
QSpacerItem* spacer = new QSpacerItem( 10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding);
1176
grid5->addItem( spacer,row,0 );
1178
brushStyle->insertItem( i18n( "No Background Fill" ) );
1179
brushStyle->insertItem( i18n( "100% Fill Pattern" ) );
1180
brushStyle->insertItem( i18n( "94% Fill Pattern" ) );
1181
brushStyle->insertItem( i18n( "88% Fill Pattern" ) );
1182
brushStyle->insertItem( i18n( "63% Fill Pattern" ) );
1183
brushStyle->insertItem( i18n( "50% Fill Pattern" ) );
1184
brushStyle->insertItem( i18n( "37% Fill Pattern" ) );
1185
brushStyle->insertItem( i18n( "12% Fill Pattern" ) );
1186
brushStyle->insertItem( i18n( "6% Fill Pattern" ) );
1187
brushStyle->insertItem( i18n( "Horizontal Lines" ) );
1188
brushStyle->insertItem( i18n( "Vertical Lines" ) );
1189
brushStyle->insertItem( i18n( "Crossing Lines" ) );
1190
brushStyle->insertItem( i18n( "Diagonal Lines ( / )" ) );
1191
brushStyle->insertItem( i18n( "Diagonal Lines ( \\ )" ) );
1192
brushStyle->insertItem( i18n( "Diagonal Crossing Lines" ) );
1193
connect( brushStyle, SIGNAL( activated( int ) ),
1194
this, SLOT( updateBrushConfiguration() ) );
1196
initComboStyleBrush();
1197
updateBrushConfiguration();
1200
void KWFrameDia::slotProtectContentChanged( bool b)
1202
if (tab4 && !noSignal && m_inputLeftMargin)
1204
m_inputLeftMargin->setEnabled( !b );
1205
m_inputRightMargin->setEnabled( !b );
1206
m_inputTopMargin->setEnabled( !b );
1207
m_inputBottomMargin->setEnabled( !b );
1208
synchronize->setEnabled( !b);
1212
void KWFrameDia::slotUpdateWidthForHeight(double height)
1214
if ( !cbAspectRatio || cbAspectRatio->state() != QButton::NoChange)
1216
if ( heightByWidthRatio == 0 )
1217
return; // avoid DBZ
1218
sw->setValue( height / heightByWidthRatio );
1222
void KWFrameDia::slotUpdateHeightForWidth( double width )
1224
if ( !cbAspectRatio || cbAspectRatio->state() != QButton::NoChange)
1226
sh->setValue( width * heightByWidthRatio );
1229
void KWFrameDia::slotKeepRatioToggled(bool on)
1231
if ( !on || !sw || !sh) return;
1234
void KWFrameDia::ensureValidFramesetSelected()
1236
enableButtonOK( rNewFrameset->isChecked() || rExistingFrameset->isChecked() && lFrameSList->selectedItem() != NULL);
1239
void KWFrameDia::calcRatio()
1241
if ( sw->value() == 0 )
1242
heightByWidthRatio = 1.0; // arbitrary
1244
heightByWidthRatio = sh->value() / sw->value();
1247
void KWFrameDia::initComboStyleBrush()
1249
bool allFramesSame=true;
1251
newBrushStyle = frame->backgroundColor();
1253
KWFrame *f=allFrames.first();
1254
newBrushStyle = f->backgroundColor();
1257
if(newBrushStyle != f->backgroundColor()) {
1258
allFramesSame=false;
1263
overwriteColor->setChecked(allFramesSame);
1267
switch ( newBrushStyle.style() )
1270
brushStyle->setCurrentItem( 0 );
1273
brushStyle->setCurrentItem( 1 );
1276
brushStyle->setCurrentItem( 2 );
1279
brushStyle->setCurrentItem( 3 );
1282
brushStyle->setCurrentItem( 4 );
1285
brushStyle->setCurrentItem( 5 );
1288
brushStyle->setCurrentItem( 6 );
1291
brushStyle->setCurrentItem( 7 );
1294
brushStyle->setCurrentItem( 8 );
1297
brushStyle->setCurrentItem( 9 );
1300
brushStyle->setCurrentItem( 10 );
1303
brushStyle->setCurrentItem( 11 );
1306
brushStyle->setCurrentItem( 12 );
1309
brushStyle->setCurrentItem( 13 );
1311
case DiagCrossPattern:
1312
brushStyle->setCurrentItem( 14 );
1317
QColor col=newBrushStyle.color();
1318
col=col.isValid() ? col : QApplication::palette().color( QPalette::Active, QColorGroup::Base );
1320
brushColor->setColor( col );
1323
QBrush KWFrameDia::frameBrushStyle()
1327
switch ( brushStyle->currentItem() )
1330
brush.setStyle( NoBrush );
1333
brush.setStyle( SolidPattern );
1336
brush.setStyle( Dense1Pattern );
1339
brush.setStyle( Dense2Pattern );
1342
brush.setStyle( Dense3Pattern );
1345
brush.setStyle( Dense4Pattern );
1348
brush.setStyle( Dense5Pattern );
1351
brush.setStyle( Dense6Pattern );
1354
brush.setStyle( Dense7Pattern );
1357
brush.setStyle( HorPattern );
1360
brush.setStyle( VerPattern );
1363
brush.setStyle( CrossPattern );
1366
brush.setStyle( BDiagPattern );
1369
brush.setStyle( FDiagPattern );
1372
brush.setStyle( DiagCrossPattern );
1376
brush.setColor( brushColor->color() );
1381
void KWFrameDia::updateBrushConfiguration()
1383
if(brushStyle->currentItem()==0) {
1384
brushPreview->hide();
1386
brushPreview->show();
1387
brushPreview->setBrush(frameBrushStyle());
1388
brushPreview->repaint(true);
767
1392
// Called when "reconnect" or "no followup" is checked
768
void KWFrameDia::setFrameBehaviourInputOn() {
1393
void KWFrameDia::setFrameBehaviorInputOn() {
769
1394
if ( tab4 && floating->isChecked() )
771
1396
if( rAppendFrame && rResizeFrame && rNoShow && !rAppendFrame->isEnabled() ) {
772
if(frameBehaviour== KWFrame::AutoExtendFrame) {
1397
if(frameBehavior== KWFrame::AutoExtendFrame) {
773
1398
rResizeFrame->setChecked(true);
774
} else if (frameBehaviour== KWFrame::AutoCreateNewFrame) {
1399
} else if (frameBehavior== KWFrame::AutoCreateNewFrame) {
775
1400
rAppendFrame->setChecked(true);
777
1402
rNoShow->setChecked(true);
861
if ( tab4 && floating->isChecked() )
1503
if ( tab4 && floating->isChecked() ) {
862
1504
runGroup->setEnabled( false ); // Runaround options don't make sense for floating frames
865
KWFrameSet *fs = frame->getFrameSet();
867
runGroup->setEnabled( !frameSetFloating && !fs->isMainFrameset() && !fs->isHeaderOrFooter() );
1507
if ( frame && frame->frameSet() )
1508
runGroup->setEnabled( !frameSetFloating && !frame->frameSet()->isMainFrameset() && !frame->frameSet()->isHeaderOrFooter() && !frame->frameSet()->isFootEndNote() );
869
1510
runGroup->setEnabled( true );
1512
runSideGroup->setEnabled( runGroup->isEnabled() && rRunBounding->isChecked() );
1513
eRGap->setEnabled( runGroup->isEnabled() &&
1514
( rRunBounding->isChecked() || rRunSkip->isChecked() ) );
874
1518
bool KWFrameDia::applyChanges()
876
//kdDebug() << "KWFrameDia::applyChanges"<<endl;
880
KWFrame *frameCopy=frame->getCopy();
884
frame->setCopy( cbCopy->isChecked() );
887
if ( frameType == FT_TEXT )
889
if(rResizeFrame->isChecked())
890
frame->setFrameBehaviour(KWFrame::AutoExtendFrame);
891
else if ( rAppendFrame->isChecked())
892
frame->setFrameBehaviour(KWFrame::AutoCreateNewFrame);
894
frame->setFrameBehaviour(KWFrame::Ignore);
898
if( reconnect && reconnect->isChecked() )
899
frame->setNewFrameBehaviour(KWFrame::Reconnect);
900
else if ( noFollowup->isChecked() )
901
frame->setNewFrameBehaviour(KWFrame::NoFollowup);
903
frame->setNewFrameBehaviour(KWFrame::Copy);
905
if ( cbAspectRatio && frame->getFrameSet() )
906
static_cast<KWPictureFrameSet *>( frame->getFrameSet() )->setKeepAspectRatio( cbAspectRatio->isChecked() );
1520
kdDebug() << "KWFrameDia::applyChanges"<<endl;
1521
KWFrame *frameCopy = 0L;
1522
bool isNewFrame=false;
1523
if(frame) { // only do undo/redo when we have 1 frame to change for now..
1524
frameCopy = frame->getCopy(); // keep a copy of the original (for undo/redo)
1525
isNewFrame = frame->frameSet() == 0L; // true if we are creating a newframe
908
bool createFrameset=false;
1527
QString name=QString::null;
1529
KMacroCommand * macroCmd=0L;
1530
if ( tab3 ) { // TAB Frameset
912
1531
// Frame/Frameset belonging, and frameset naming
913
// We have basically three cases:
914
// * Creating a frame (fs==0), and creating a frameset ('*' selected)
1532
// We basically have three cases:
1533
// * Creating a new frame (fs==0), and creating a frameset (rNewFrameset selected)
915
1534
// * Creating a frame (fs==0), and attaching to an existing frameset (other)
916
// * Editing a frame (fs!=0), possibly changing the frameset attachment, possibly renaming the frameset...
918
QString str = lFrameSList->currentItem() ? lFrameSList->currentItem()->text( 0 ) : QString::null;
919
createFrameset = ( str[ 0 ] == '*' );
920
if ( createFrameset )
922
int _num = str.toInt() - 1;
923
KWFrameSet * fs = frame->getFrameSet();
1535
// * Editing a frame (fs!=0), possibly changing the frameset attachment (maybe creating a new one)
925
1537
name = eFrameSetName->text();
926
1538
if ( name.isEmpty() ) // Don't allow empty names
927
1539
name = doc->generateFramesetName( i18n( "Text Frameset %1" ) );
929
if ( fs || createFrameset ) // Last or first case -> check frameset name unicity
931
// Note: this isn't recursive, so it won't find table cells.
932
QListIterator<KWFrameSet> fit = doc->framesetsIterator();
933
for ( ; fit.current() ; ++fit )
934
if ( fit.current()->getName() == name &&
935
fs /*which is 0L when creating*/ != fit.current() &&
936
!fit.current()->isDeleted() ) // Allow to reuse a deleted frameset's name
1540
KWFrameSet *fs = 0L;
1541
QListViewItem *frameSetItem = lFrameSList->selectedItem();
1543
QString str = frameSetItem->text( 0 );
1544
fs = doc->frameSet(str.toInt() - 1);
1546
if(rNewFrameset->isChecked()) { // create a new FS.
1547
if(frame && frame->frameSet()) {
1549
if(! mayDeleteFrameSet( static_cast<KWTextFrameSet*>(frame->frameSet())))
1551
frame->frameSet()->delFrame( frame, false );
1553
// first check all frames and ask the user if its ok to disconnect.
1554
for(KWFrame *f=allFrames.first();f; f=allFrames.next()) {
1555
if(! mayDeleteFrameSet( static_cast<KWTextFrameSet*>(f->frameSet())))
1558
for(KWFrame *f=allFrames.first();f; f=allFrames.next())
1559
f->frameSet()->delFrame( f, false );
1561
} else if(rExistingFrameset->isChecked()) { // rename and/or reconnect a new frameset for this frame.
1562
if(frameSetItem && (fs->getName() != frameSetItem->text( 1 ))) { // rename FS.
1564
macroCmd = new KMacroCommand( i18n("Rename Frameset") );
1566
KWFrameSetPropertyCommand *cmd = new KWFrameSetPropertyCommand( i18n("Rename Frameset"), fs, KWFrameSetPropertyCommand::FSP_NAME, frameSetItem->text( 1 ));
1567
macroCmd->addCommand(cmd);
1571
if(frame->frameSet() != fs) {
1572
if(frame->frameSet()!=0) {
1574
if(! mayDeleteFrameSet( dynamic_cast<KWTextFrameSet*>(frame->frameSet())))
1576
frame->frameSet()->delFrame( frame, false );
1578
fs->addFrame(frame);
1581
// first check all frames and ask the user if its ok to reconnect.
1582
for(KWFrame *f=allFrames.first();f; f=allFrames.next()) {
1583
if(f->frameSet() != fs) { // reconnect.
1584
if(! mayDeleteFrameSet( dynamic_cast<KWTextFrameSet*>(f->frameSet())))
938
if ( createFrameset )
1590
// then do the reconnects.
1591
for(KWFrame *f=allFrames.first();f; f=allFrames.next()) {
1592
KWFrameSet *fs2=f->frameSet();
1593
if(! (fs2->isHeaderOrFooter() || fs2->isMainFrameset()) ) {
1594
if(fs2 != fs) { // reconnect.
1595
f->frameSet()->delFrame( f, false );
1603
if(rNewFrameset->isChecked() || rExistingFrameset->isChecked()) {
1604
// check if new name is unique
1605
for (QPtrListIterator<KWFrameSet> fit = doc->framesetsIterator(); fit.current() ; ++fit ) {
1606
if ( !fit.current()->isDeleted() && // Allow to reuse a deleted frameset's name
1607
fs != fit.current() && fit.current()->getName() == name) {
1608
if ( rNewFrameset->isChecked() )
939
1609
KMessageBox::sorry( this,
940
i18n( "A new frameset with the name '%1'\n"
941
"can not be made because a frameset with that name\n"
942
"already exists. Please enter another name or select\n"
1610
i18n( "A new frameset with the name '%1' "
1611
"can not be made because a frameset with that name "
1612
"already exists. Please enter another name or select "
943
1613
"an existing frameset from the list.").arg(name));
945
1615
KMessageBox::sorry( this,
946
i18n( "A frameset with the name '%1'\n"
947
"already exists. Please enter another name.\n" ).arg(name) );
1616
i18n( "A frameset with the name '%1' "
1617
"already exists. Please enter another name." ).arg(name) );
948
1618
eFrameSetName->setText(oldFrameSetName);
1624
if ( tab1 ) { // TAB Frame Options
1627
frame->setCopy( cbCopy->isChecked() );
1628
else if(cbCopy->state() != QButton::NoChange) {
1629
for(KWFrame *f=allFrames.first();f; f=allFrames.next()) {
1630
if(f == f->frameSet()->frame(0)) continue; // skip first frame of any frameset.
1631
f->setCopy( cbCopy->isChecked() );
953
// Third case (changing frame attachment)
955
! (static_cast<unsigned int>( _num ) < doc->getNumFrameSets() &&
956
fs == doc->getFrameSet(_num)))
1636
if ( frameType == FT_TEXT )
958
// Check if last frame
959
if ( fs->getNumFrames() == 1 )
961
kdDebug() << "KWFrameDia::applyChanges " << fs->getName() << " has only one frame" << endl;
962
ASSERT( fs->type() == FT_TEXT );
963
KWTextFrameSet * textfs = static_cast<KWTextFrameSet*>( fs );
964
QTextParag * parag = textfs->textDocument()->firstParag();
965
bool isEmpty = parag->next() == 0L && parag->length() == 1;
968
int result = KMessageBox::warningContinueCancel(this,
969
i18n( "You are about to reconnect the last Frame of the\n"
971
"The contents of this Frameset will not appear\n"
973
"Are you sure you want to do that?").arg(fs->getName()),
974
i18n("Reconnect Frame"), i18n("&Reconnect"));
975
if (result != KMessageBox::Continue)
980
kdDebug() << "KWFrameDia::applyChanges detaching frame from frameset " << fs->getName() << endl;
981
// Detach frame from its frameset (re-attach is done afterwards)
982
fs->delFrame( frame, FALSE );
985
// Do not use 'fs' past this, the above might have changed the frame's frameset
987
if(frame->getFrameSet() == 0L) { // if there is no frameset (anymore)
988
if( ! createFrameset )
990
kdDebug() << "KWFrameDia::applyChanges attaching to frameset " << _num << endl;
991
// attach frame to frameset number _num
992
KWFrameSet * newFs = doc->getFrameSet( _num );
994
newFs->addFrame( frame );
1639
KWFrame::FrameBehavior fb=KWFrame::AutoCreateNewFrame;
1640
if(rResizeFrame->isChecked())
1641
fb = KWFrame::AutoExtendFrame;
1642
else if ( rAppendFrame->isChecked())
1643
fb = KWFrame::AutoCreateNewFrame;
1644
else if ( rNoShow->isChecked())
1645
fb = KWFrame::Ignore;
1650
if(cbAllFrames->isChecked() && frame->frameSet())
1651
frame->frameSet()->setFrameBehavior(fb);
1653
frame->setFrameBehavior(fb);
1655
for(KWFrame *f=allFrames.first();f; f=allFrames.next())
1656
if(cbAllFrames->isChecked())
1657
f->frameSet()->setFrameBehavior(fb);
1659
f->setFrameBehavior(fb);
1661
if ( frame && frame->frameSet())
1663
KWTextFrameSet * frm=static_cast<KWTextFrameSet *>( frame->frameSet() );
1664
if(frm->textObject()->protectContent()!=cbProtectContent->isChecked())
1667
macroCmd = new KMacroCommand( i18n("Protect Content") );
1668
KWProtectContentCommand * cmd = new KWProtectContentCommand( i18n("Protect Content"), frm,cbProtectContent->isChecked() );
1670
macroCmd->addCommand(cmd);
1675
if ( cbProtectContent->state() != QButton::NoChange)
1677
for(KWFrame *f=allFrames.first();f; f=allFrames.next())
1679
KWTextFrameSet * frm=dynamic_cast<KWTextFrameSet *>( f->frameSet() );
1682
if(frm->textObject()->protectContent()!=cbProtectContent->isChecked())
1685
macroCmd = new KMacroCommand( i18n("Protect Content") );
1686
KWProtectContentCommand * cmd = new KWProtectContentCommand( i18n("Protect Content"), frm,cbProtectContent->isChecked() );
1688
macroCmd->addCommand(cmd);
1699
KWFrame::NewFrameBehavior nfb=KWFrame::Reconnect;
1700
if( reconnect && reconnect->isChecked() )
1701
nfb = KWFrame::Reconnect;
1702
else if ( noFollowup->isChecked() )
1703
nfb = KWFrame::NoFollowup;
1704
else if ( copyRadio->isChecked() )
1705
nfb = KWFrame::Copy;
1710
if(cbAllFrames->isChecked() && frame->frameSet())
1711
frame->frameSet()->setNewFrameBehavior(nfb);
1713
frame->setNewFrameBehavior(nfb);
1715
for(KWFrame *f=allFrames.first();f; f=allFrames.next())
1716
if(cbAllFrames->isChecked())
1717
f->frameSet()->setNewFrameBehavior(nfb);
1719
f->setNewFrameBehavior(nfb);
1722
if ( cbAspectRatio && (frameType==FT_PICTURE
1723
#if 0 // KWORD_HORIZONTAL_LINE
1724
|| frameType == FT_HORZLINE
1001
frame->getFrameSet()->setName( name );
1729
KWPictureFrameSet * frm=static_cast<KWPictureFrameSet *>( frame->frameSet() );
1730
if(frm->keepAspectRatio()!=cbAspectRatio->isChecked())
1733
macroCmd = new KMacroCommand( i18n("Frame Properties") );
1734
KWFrameSetPropertyCommand *cmd = new KWFrameSetPropertyCommand( QString::null,frame->frameSet(), KWFrameSetPropertyCommand::FSP_KEEPASPECTRATION, cbAspectRatio->isChecked()? "keepRatio" : "dontKeepRatio" );
1737
macroCmd->addCommand(cmd);
1739
} else if(cbAspectRatio->state() != QButton::NoChange) {
1740
for(KWFrame *f=allFrames.first();f; f=allFrames.next()) {
1741
KWPictureFrameSet *fs = dynamic_cast<KWPictureFrameSet *> (f->frameSet());
1743
if(fs->keepAspectRatio()!=cbAspectRatio->isChecked())
1746
macroCmd = new KMacroCommand( i18n("Frame Properties") );
1747
KWFrameSetPropertyCommand *cmd = new KWFrameSetPropertyCommand( QString::null,fs, KWFrameSetPropertyCommand::FSP_KEEPASPECTRATION, cbAspectRatio->isChecked()? "keepRatio" : "dontKeepRatio" );
1750
macroCmd->addCommand(cmd);
1757
if ( tab2 ) { // TAB Text Runaround
1759
KWFrame::RunAround ra=KWFrame::RA_BOUNDINGRECT;
1008
1761
if ( rRunNo->isChecked() )
1009
frame->setRunAround( KWFrame::RA_NO );
1762
ra = KWFrame::RA_NO;
1010
1763
else if ( rRunBounding->isChecked() )
1011
frame->setRunAround( KWFrame::RA_BOUNDINGRECT );
1012
else if ( rRunContur->isChecked() )
1013
frame->setRunAround( KWFrame::RA_SKIP );
1015
frame->setRunAroundGap( KWUnit::fromUserValue( eRGap->text().toDouble(), doc->getUnit() ) );
1017
KMacroCommand * macroCmd=0L;
1019
if(!createFrameset && (frameCopy->runAroundGap()!=frame->runAroundGap()
1020
|| frameCopy->runAround()!=frame->runAround()
1021
|| frameCopy->runAround()!=frame->runAround()
1022
|| frameCopy->getFrameBehaviour()!=frame->getFrameBehaviour()
1023
|| frameCopy->getNewFrameBehaviour()!=frame->getNewFrameBehaviour()))
1026
macroCmd = new KMacroCommand( i18n("Frame Properties") );
1027
KWFramePropertiesCommand*cmd = new KWFramePropertiesCommand( i18n("Frame Properties"), frameCopy, frame );
1028
macroCmd->addCommand(cmd);
1033
if(frame->getFrameSet() == 0L && createFrameset )
1764
ra = KWFrame::RA_BOUNDINGRECT;
1765
else if ( rRunSkip->isChecked() )
1766
ra = KWFrame::RA_SKIP;
1770
frame->setRunAround(ra);
1772
for(KWFrame *f=allFrames.first();f; f=allFrames.next())
1773
f->setRunAround(ra);
1777
KWFrame::RunAroundSide rs=KWFrame::RA_BIGGEST;
1779
if ( rRunLeft->isChecked() )
1780
rs = KWFrame::RA_LEFT;
1781
else if ( rRunRight->isChecked() )
1782
rs = KWFrame::RA_RIGHT;
1783
else if ( rRunBiggest->isChecked() )
1784
rs = KWFrame::RA_BIGGEST;
1788
frame->setRunAroundSide(rs);
1790
for(KWFrame *f=allFrames.first();f; f=allFrames.next())
1791
f->setRunAroundSide(rs);
1795
double newValue = QMAX( 0, KoUnit::ptFromUnit( eRGap->value(), doc->getUnit() ));
1797
frame->setRunAroundGap(newValue);
1799
for(KWFrame *f=allFrames.first();f; f=allFrames.next())
1800
f->setRunAroundGap(newValue);
1802
if(tab5) { // Tab Background fill/color
1803
QBrush tmpBrush=frameBrushStyle();
1805
if(tmpBrush!=frame->backgroundColor()) {
1806
frame->setBackgroundColor(tmpBrush);
1807
doc->repaintAllViews();
1809
} else if(overwriteColor->isChecked()) {
1810
for(KWFrame *f=allFrames.first();f; f=allFrames.next())
1811
f->setBackgroundColor(tmpBrush);
1812
doc->repaintAllViews();
1823
double uBottom = 0.0;
1824
double uRight = 0.0;
1825
if(tab4 && frame) { // TAB Geometry
1826
px = QMAX(0,KoUnit::ptFromUnit( sx->value(), doc->getUnit() ));
1827
int pageNum = QMIN( static_cast<int>(frame->y() / doc->ptPaperHeight()), doc->numPages()-1 );
1828
py = QMAX(0, KoUnit::ptFromUnit(sy->value(),doc->getUnit())) +pageNum * doc->ptPaperHeight();
1829
pw = QMAX(KoUnit::ptFromUnit( sw->value(), doc->getUnit() ),0);
1830
ph = QMAX(KoUnit::ptFromUnit(sh->value(), doc->getUnit() ),0);
1831
if ( m_inputLeftMargin )
1035
kdDebug() << "KWFrameDia::applyChanges creating a new frameset" << endl;
1833
uLeft=QMAX(0, KoUnit::ptFromUnit( m_inputLeftMargin->value(), doc->getUnit() ));
1834
uRight=QMAX(0, KoUnit::ptFromUnit( m_inputRightMargin->value(), doc->getUnit() ));
1835
uTop=QMAX(0, KoUnit::ptFromUnit( m_inputTopMargin->value(), doc->getUnit() ));
1836
uBottom=QMAX(0, KoUnit::ptFromUnit( m_inputBottomMargin->value(), doc->getUnit() ));
1839
KoRect rect( px, py, pw, ph );
1841
//kdDebug() << "New geom: " << sx->text().toDouble() << ", " << sy->text().toDouble()
1842
//<< " " << sw->text().toDouble() << "x" << sh->text().toDouble() << endl;
1843
//kdDebug()<<" rect :"<<px <<" py :"<<py<<" pw :"<<pw <<" ph "<<ph<<endl;
1844
// Undo/redo for frame properties
1845
if(frame) { // only do undo/redo when we edit 1 frame for now..
1847
if(frame->frameSet() == 0L ) { // if there is no frameset (anymore)
1036
1848
KWTextFrameSet *_frameSet = new KWTextFrameSet( doc, name );
1037
1849
_frameSet->addFrame( frame );
1851
if( !doc->isOutOfPage( rect , frame->pageNum() ) ) {
1852
frame->setRect( px, py, pw, ph );
1853
//don't change margins when frame is protected.
1854
if ( m_inputLeftMargin && ( !tab1 || (tab1 && cbProtectContent && !cbProtectContent->isChecked())) )
1855
frame->setFrameMargins( uLeft, uTop, uRight, uBottom);
1856
doc->frameChanged( frame );
1858
KMessageBox::sorry( this,i18n("The frame will not be resized because the new size would be greater than the size of the page."));
1038
1861
doc->addFrameSet( _frameSet );
1039
KWCreateFrameCommand *cmd=new KWCreateFrameCommand( i18n("Create text frame"), frame) ;
1040
doc->addCommand(cmd);
1046
// The floating attribute applies to the whole frameset...
1047
KWFrameSet * fs = frame->getFrameSet();
1048
KWFrameSet * parentFs = fs->getGroupManager() ? fs->getGroupManager() : fs;
1051
if ( floating->isChecked() && !parentFs->isFloating() )
1054
macroCmd = new KMacroCommand( i18n("Make FrameSet Inline") );
1056
QList<FrameIndex> frameindexList;
1057
QList<FrameResizeStruct> frameindexMove;
1059
FrameIndex *index=new FrameIndex( frame );
1060
FrameResizeStruct *move=new FrameResizeStruct;
1062
move->sizeOfBegin=frame->normalize();
1064
// turn non-floating frame into floating frame
1065
KWFrameSetFloatingCommand *cmd = new KWFrameSetFloatingCommand( i18n("Make FrameSet Inline"), parentFs, true );
1068
move->sizeOfEnd=frame->normalize();
1070
frameindexList.append(index);
1071
frameindexMove.append(move);
1073
KWFrameMoveCommand *cmdMoveFrame = new KWFrameMoveCommand( i18n("Move Frame"), frameindexList, frameindexMove );
1075
macroCmd->addCommand(cmdMoveFrame);
1076
macroCmd->addCommand(cmd);
1078
else if ( !floating->isChecked() && parentFs->isFloating() )
1081
macroCmd = new KMacroCommand( i18n("Make FrameSet Non-Inline") );
1082
// turn floating-frame into non-floating frame
1083
KWFrameSetFloatingCommand *cmd = new KWFrameSetFloatingCommand( i18n("Make FrameSet Non-Inline"), parentFs, false );
1084
macroCmd->addCommand(cmd);
1088
if ( doc->isOnlyOneFrameSelected() && ( doc->processingType() == KWDocument::DTP ||
1089
( doc->processingType() == KWDocument::WP &&
1090
doc->getFrameSetNum( frame->getFrameSet() ) > 0 ) ) ) {
1091
if ( oldX != sx->text().toDouble() || oldY != sy->text().toDouble() || oldW != sw->text().toDouble() || oldH != sh->text().toDouble() ) {
1092
//kdDebug() << "Old geom: " << oldX << ", " << oldY<< " " << oldW << "x" << oldH << endl;
1093
//kdDebug() << "New geom: " << sx->text().toDouble() << ", " << sy->text().toDouble()
1094
// << " " << sw->text().toDouble() << "x" << sh->text().toDouble() << endl;
1096
double px = KWUnit::fromUserValue( QMAX( sx->text().toDouble(), 0 ), doc->getUnit() );
1097
double py = KWUnit::fromUserValue( (QMAX( sy->text().toDouble(),0)) + (frame->pageNum() * doc->ptPaperHeight()), doc->getUnit());
1098
double pw = KWUnit::fromUserValue( QMAX( sw->text().toDouble(), 0 ), doc->getUnit() );
1099
double ph = KWUnit::fromUserValue( QMAX( sh->text().toDouble(), 0 ), doc->getUnit() );
1101
FrameIndex index( frame );
1102
FrameResizeStruct tmpResize;
1103
tmpResize.sizeOfBegin = frame->normalize();
1104
KoRect rect( px, py, pw, ph );
1105
if( !doc->isOutOfPage( rect , frame->pageNum() ) )
1106
frame->setRect( px, py, pw, ph );
1107
// else TODO message box after 1.1
1109
// TODO apply page limits?
1110
tmpResize.sizeOfEnd = frame->normalize();
1112
macroCmd = new KMacroCommand( i18n("Resize Frame") );
1114
KWFrameResizeCommand *cmd = new KWFrameResizeCommand( i18n("Resize Frame"), index, tmpResize ) ;
1115
macroCmd->addCommand(cmd);
1116
doc->frameChanged( frame );
1120
double u1, u2, u3, u4;
1121
u1=KWUnit::fromUserValue( QMAX(sml->text().toDouble(),0), doc->getUnit() );
1122
u2=KWUnit::fromUserValue( QMAX(smr->text().toDouble(),0), doc->getUnit() );
1123
u3=KWUnit::fromUserValue( QMAX(smt->text().toDouble(),0), doc->getUnit() );
1124
u4=KWUnit::fromUserValue( QMAX(smb->text().toDouble(),0), doc->getUnit() );
1125
doc->setFrameMargins( u1, u2, u3, u4 );
1863
macroCmd = new KMacroCommand( i18n("Create Text Frame") );
1864
KWCreateFrameCommand *cmd=new KWCreateFrameCommand( i18n("Create Text Frame"), frame) ;
1865
macroCmd->addCommand(cmd);
1867
if(!isNewFrame && (frameCopy->isCopy()!=frame->isCopy()
1868
|| frameCopy->frameBehavior()!=frame->frameBehavior()
1869
|| frameCopy->newFrameBehavior()!=frame->newFrameBehavior()
1870
|| frameCopy->runAround()!=frame->runAround()
1871
|| frameCopy->runAroundSide()!=frame->runAroundSide()
1872
|| frameCopy->runAroundGap()!=frame->runAroundGap()
1873
|| (tab5 && frameCopy->backgroundColor()!=frameBrushStyle())))
1876
macroCmd = new KMacroCommand( i18n("Frame Properties") );
1878
KWFramePropertiesCommand*cmd = new KWFramePropertiesCommand( QString::null, frameCopy, frame );
1879
macroCmd->addCommand(cmd);
1884
if ( tab4 ) { // TAB Geometry
1886
KWFrame *f=allFrames.first();
1889
// The floating attribute applies to the whole frameset...
1890
KWFrameSet * fs = f->frameSet();
1891
KWFrameSet * parentFs = fs->getGroupManager() ? fs->getGroupManager() : fs;
1894
if ( floating->isChecked() && !parentFs->isFloating() )
1897
macroCmd = new KMacroCommand( i18n("Make Frameset Inline") );
1899
QValueList<FrameIndex> frameindexList;
1900
QValueList<FrameMoveStruct> frameindexMove;
1902
KoPoint oldPos = f->topLeft();
1904
// turn non-floating frame into floating frame
1905
KWFrameSetPropertyCommand *cmd = new KWFrameSetPropertyCommand( QString::null, parentFs, KWFrameSetPropertyCommand::FSP_FLOATING, "true" );
1908
frameindexList.append( FrameIndex( f ) );
1909
frameindexMove.append( FrameMoveStruct( oldPos, f->topLeft() ) );
1911
KWFrameMoveCommand *cmdMoveFrame = new KWFrameMoveCommand( QString::null, frameindexList, frameindexMove );
1913
macroCmd->addCommand(cmdMoveFrame);
1914
macroCmd->addCommand(cmd);
1916
else if ( !floating->isChecked() && parentFs->isFloating() )
1919
macroCmd = new KMacroCommand( i18n("Make Frameset Non-Inline") );
1920
// turn floating-frame into non-floating frame
1921
KWFrameSetPropertyCommand *cmd = new KWFrameSetPropertyCommand( QString::null, parentFs, KWFrameSetPropertyCommand::FSP_FLOATING, "false" );
1922
macroCmd->addCommand(cmd);
1925
if ( parentFs->isProtectSize() != protectSize->isChecked() )
1928
macroCmd = new KMacroCommand( i18n("Protect Size") );
1929
KWFrameSetPropertyCommand *cmd = new KWFrameSetPropertyCommand( QString::null, fs, KWFrameSetPropertyCommand::FSP_PROTECTSIZE, protectSize->isChecked()? "true" : "false" );
1930
macroCmd->addCommand(cmd);
1935
if ( !frame->frameSet()->isMainFrameset() &&
1936
(oldX != sx->value() || oldY != sy->value() || oldW != sw->value() || oldH != sh->value() )) {
1937
//kdDebug() << "Old geom: " << oldX << ", " << oldY<< " " << oldW << "x" << oldH << endl;
1938
//kdDebug() << "New geom: " << sx->text().toDouble() << ", " << sy->text().toDouble()
1939
// << " " << sw->text().toDouble() << "x" << sh->text().toDouble() << endl;
1941
if( !doc->isOutOfPage( rect , f->pageNum() ) )
1943
FrameIndex index( f );
1944
KoRect initialRect = f->normalize();
1945
double initialMinFrameHeight = f->minFrameHeight();
1946
f->setRect( px, py, pw, ph );
1947
FrameResizeStruct tmpResize( initialRect, initialMinFrameHeight, frame->normalize() );
1949
macroCmd = new KMacroCommand( i18n("Resize Frame") );
1951
KWFrameResizeCommand *cmd = new KWFrameResizeCommand( i18n("Resize Frame"), index, tmpResize ) ;
1952
macroCmd->addCommand(cmd);
1953
doc->frameChanged( f );
1957
KMessageBox::sorry( this,i18n("The frame will not be resized because the new size would be greater than the size of the page."));
1960
if (m_inputLeftMargin && (!tab1 || (tab1 && cbProtectContent && !cbProtectContent->isChecked())))
1962
if ( oldMarginLeft!=m_inputLeftMargin->value() || oldMarginRight!=m_inputRightMargin->value() ||
1963
oldMarginTop!=m_inputTopMargin->value() || oldMarginBottom!=m_inputBottomMargin->value())
1965
FrameIndex index( f );
1966
FrameMarginsStruct tmpMargBegin(f);
1967
FrameMarginsStruct tmpMargEnd(uLeft, uTop, uRight, uBottom);
1969
macroCmd = new KMacroCommand( i18n("Change Margin Frame") );
1970
KWFrameChangeFrameMarginCommand *cmd = new KWFrameChangeFrameMarginCommand( i18n("Change Margin Frame"), index, tmpMargBegin, tmpMargEnd) ;
1972
macroCmd->addCommand(cmd);
1129
1980
doc->addCommand(macroCmd);