~ubuntu-branches/ubuntu/breezy/koffice/breezy

« back to all changes in this revision

Viewing changes to kword/framedia.cc

  • Committer: Bazaar Package Importer
  • Author(s): Ben Burton
  • Date: 2004-05-09 11:33:00 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20040509113300-vfrdadqsvjfuhn3b
Tags: 1:1.3.1-1
* New upstream bugfix release.
* Built against newer imagemagick (closes: #246623).
* Made koffice-libs/kformula recommend/depend on latex-xft-fonts, which
  provides mathematical fonts that the formula editor can use.  Also
  patched the kformula part to make these fonts the default.
* Changed kword menu hint from "WordProcessors" to "Word processors"
  (closes: #246209).
* Spellchecker configuration is now fixed (closes: #221256, #227568).

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
*/
19
19
 
20
20
#include "kwdoc.h"
21
 
#include "kwframe.h"
22
21
#include "kwtextframeset.h"
23
22
#include "framedia.h"
24
23
#include "framedia.moc"
25
24
#include "defs.h"
26
25
#include "kwcommand.h"
27
26
#include "kwtableframeset.h"
 
27
#include <knuminput.h>
28
28
 
29
29
#include <klocale.h>
30
 
#include <kapp.h>
31
30
#include <kiconloader.h>
32
 
#include <kglobal.h>
33
31
 
 
32
#include <qwhatsthis.h>
34
33
#include <qlineedit.h>
35
34
#include <qcheckbox.h>
36
35
#include <qcombobox.h>
37
 
#include <qlayout.h>
38
36
#include <qlabel.h>
39
 
#include <qgroupbox.h>
40
 
#include <qpixmap.h>
41
37
#include <qradiobutton.h>
42
 
#include <qevent.h>
43
38
#include <qlistview.h>
44
39
#include <qbuttongroup.h>
45
40
#include <qhbox.h>
46
41
#include <qheader.h>
47
42
#include <kmessagebox.h>
48
 
#include <qvalidator.h>
 
43
#include <knumvalidator.h>
 
44
#include <kcolorbutton.h>
49
45
 
50
46
#include <stdlib.h>
51
47
#include <limits.h>
53
49
#include <kdebug.h>
54
50
 
55
51
/******************************************************************/
 
52
/* Class KWBrushStylePreview                                      */
 
53
/******************************************************************/
 
54
KWBrushStylePreview::KWBrushStylePreview( QWidget*parent, const char* name )
 
55
    :QFrame(parent,name)
 
56
{
 
57
}
 
58
 
 
59
void KWBrushStylePreview::drawContents( QPainter* painter )
 
60
{
 
61
    painter->save();
 
62
    painter->translate( contentsRect().x(), contentsRect().y() );
 
63
    painter->fillRect( 0, 0, contentsRect().width(), contentsRect().height(),
 
64
                       colorGroup().base() );
 
65
    painter->fillRect( 0, 0, contentsRect().width(), contentsRect().height(), brush );
 
66
    painter->restore();
 
67
}
 
68
 
 
69
 
 
70
/******************************************************************/
56
71
/* Class: KWFrameDia                                              *
57
72
 *
58
73
 *  TAB Frame Options
59
 
 *      Set options dependend of frametype
 
74
 *      Set options dependent of frametype
60
75
 *  TAB Text Runaround
61
76
 *      Set the text behaviour of this frame
62
77
 *  TAB Frameset
72
87
 ******************************************************************/
73
88
 
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)
76
91
{
 
92
    noSignal=false;
77
93
    frame = _frame;
78
 
    KWFrameSet * fs = frame->getFrameSet();
79
 
    KWTableFrameSet *table = fs->getGroupManager();
80
 
    if(table)
81
 
        frameType = table->type();
82
 
    else
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();
 
94
    if(frame==0) {
 
95
        kdDebug() << "ERROR: KWFrameDia::constructor no frame.."<<endl;
 
96
        return;
 
97
    }
 
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();
87
104
    doc = 0;
88
105
    init();
89
106
}
90
107
 
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)
94
111
{
 
112
    noSignal=false;
95
113
    frameType=_ft;
96
114
    doc = _doc;
97
115
    frame= _frame;
98
116
    frameSetFloating = false;
 
117
    frameSetProtectedSize = false;
 
118
    if(frame==0) {
 
119
        kdDebug() << "ERROR: KWFrameDia::constructor no frame.."<<endl;
 
120
        return;
 
121
    }
 
122
    init();
 
123
}
 
124
 
 
125
KWFrameDia::KWFrameDia( QWidget *parent, QPtrList<KWFrame> listOfFrames) : KDialogBase( Tabbed, i18n("Frames Properties"), Ok | Cancel, Ok, parent, "framedialog", true) , allFrames() {
 
126
    noSignal=false;
 
127
 
 
128
    frame=0L;
 
129
    tab1 = tab2 = tab3 = tab4 = tab5 = 0;
 
130
 
 
131
    KWFrame *f=listOfFrames.first();
 
132
    if(f==0) {
 
133
        kdDebug() << "ERROR: KWFrameDia::constructor no frames.."<<endl;
 
134
        return;
 
135
    }
 
136
    if ( listOfFrames.count() == 1 )
 
137
        setCaption( i18n( "Frame Settings for %1" ).arg( f->frameSet()->getName() ) );
 
138
 
 
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();
 
144
 
 
145
    if( !fs->isMainFrameset() ) { // don't include the main fs.
 
146
        allFrames.append(f);
 
147
        frameTypeUnset=false;
 
148
    }
 
149
    f=listOfFrames.next();
 
150
    while(f) {
 
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;
 
155
            if(frameTypeUnset) {
 
156
                frameType = fs->type();
 
157
                frameTypeUnset = false;
 
158
            } else if(frameType != fs->type()) frameType= FT_TEXT;
 
159
            allFrames.append(f);
 
160
        }
 
161
        f=listOfFrames.next();
 
162
    }
 
163
    if(allFrames.count()==0)
 
164
        allFrames.append(listOfFrames.first());
 
165
 
99
166
    init();
100
167
}
101
168
 
102
169
void KWFrameDia::init() {
103
170
 
104
 
    tab1 = tab2 = tab3 = tab4 = 0;
105
 
    if (frame) {
 
171
    tab1 = tab2 = tab3 = tab4 = tab5 = 0;
 
172
    sw = sh = 0L;
 
173
    cbAspectRatio=0L;
 
174
    KWFrameSet *fs=0;
 
175
    if(frame) {
 
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
109
 
        if(!doc && fs)
110
 
        {
111
 
            doc = fs->kWordDocument();
112
 
        }
113
 
        if(!doc)
114
 
        {
115
 
            kdDebug() << "ERROR: KWFrameDia::init frame has no reference to doc.."<<endl;
116
 
            return;
117
 
        }
118
 
        if( fs && fs->isMainFrameset() )
119
 
        {
120
 
            setupTab2();
121
 
            setupTab4();
122
 
        }
123
 
        else if ( fs && fs->isHeaderOrFooter() )
124
 
        {
125
 
            setupTab1();
126
 
            setupTab2();
127
 
            setupTab4();
128
 
        }
129
 
        else if(frameType == FT_TEXT)
130
 
        {
131
 
            setupTab1();
132
 
            setupTab2();
133
 
            setupTab3();
134
 
            setupTab4();
135
 
            if(! frame->getFrameSet()) // first creation
136
 
                showPage(2);
137
 
        }
138
 
        else if(frameType == FT_PICTURE || frameType == FT_CLIPART)
139
 
        {
140
 
            setupTab1();
141
 
            setupTab2();
142
 
            setupTab4();
143
 
            showPage(1); // while options are not implemented..
144
 
        }
145
 
        else if(frameType == FT_PART)
146
 
        {
147
 
            setupTab2();
148
 
            setupTab4();
149
 
        }
150
 
        else if(frameType == FT_FORMULA)
151
 
        {
152
 
            setupTab1();
153
 
            setupTab2();
154
 
            setupTab4();
155
 
            showPage(1); // while options are not implemented..
156
 
        }
157
 
        else if(frameType == FT_TABLE)
158
 
        {
159
 
             setupTab4();
160
 
             grp1->setEnabled(false);
161
 
        }
162
 
    }
163
 
    else
164
 
        kdDebug() << "ERROR: KWFrameDia::init  no frame.."<<endl;
 
179
    }
 
180
    if(!doc && fs)
 
181
    {
 
182
        doc = fs->kWordDocument();
 
183
    }
 
184
    if(!doc)
 
185
    {
 
186
        kdDebug() << "ERROR: KWFrameDia::init frame has no reference to doc.."<<endl;
 
187
        return;
 
188
    }
 
189
    if( fs && fs->isMainFrameset() )
 
190
    {
 
191
        setupTab5();
 
192
        setupTab4();
 
193
    }
 
194
    else if ( fs && (fs->isHeaderOrFooter() || fs->isFootEndNote()) )
 
195
    {
 
196
        setupTab1();
 
197
        if ( !fs->isMainFrameset() && !fs->isHeaderOrFooter() && !fs->isFootEndNote())
 
198
            setupTab2();
 
199
        setupTab4();
 
200
        setupTab5();
 
201
    }
 
202
    else if(frameType == FT_TEXT)
 
203
    {
 
204
        setupTab1();
 
205
        if ( fs && !fs->isMainFrameset() && !fs->isHeaderOrFooter() && !fs->isFootEndNote())
 
206
            setupTab2();
 
207
        else if ( !fs )
 
208
            setupTab2();
 
209
        setupTab3();
 
210
        setupTab4();
 
211
        setupTab5();
 
212
        if(! fs) // first creation
 
213
            showPage(2);
 
214
    }
 
215
    else if(frameType == FT_PICTURE
 
216
#if 0 // KWORD_HORIZONTAL_LINE
 
217
        || frameType == FT_HORZLINE
 
218
#endif
 
219
        )
 
220
    {
 
221
        setupTab1();
 
222
        if ( frameType == FT_PICTURE )
 
223
            setupTab2();
 
224
        if(frame)       // not for multiframe dia
 
225
            setupTab4();
 
226
        showPage(1); // while options are not implemented..
 
227
    }
 
228
    else if(frameType == FT_PART)
 
229
    {
 
230
        setupTab2();
 
231
        if(frame)       // not for multiframe dia
 
232
            setupTab4();
 
233
    }
 
234
    else if(frameType == FT_FORMULA)
 
235
    {
 
236
        setupTab1();
 
237
        setupTab2();
 
238
        if(frame)       // not for multiframe dia
 
239
            setupTab4();
 
240
        showPage(1); // while options are not implemented..
 
241
    }
 
242
    else if(frameType == FT_TABLE)
 
243
    {
 
244
        setupTab4();
 
245
        setupTab5();
 
246
    }
165
247
    setInitialSize( QSize(550, 400) );
166
248
}
167
249
 
168
 
 
169
250
void KWFrameDia::setupTab1(){ // TAB Frame Options
170
251
    //kdDebug() << "setup tab 1 Frame options"<<endl;
171
252
    tab1 = addPage( i18n("Options") );
172
 
 
173
253
    int columns = 0;
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
 
257
#endif
 
258
        )
175
259
        columns = 1;
176
260
    else if(frameType == FT_TEXT)
177
261
        columns = 2;
182
266
    cbCopy = new QCheckBox( i18n("Frame is a copy of the previous frame"),tab1 );
183
267
    grid1->addWidget(cbCopy,1,0);
184
268
 
185
 
    cbCopy->setChecked( frame->isCopy() );
186
 
    cbCopy->setEnabled( frame->getFrameSet() && frame->getFrameSet()->getFrame( 0 ) != frame ); // First one can't be a copy
187
 
    // Well, for images, formulas etc. it doesn't make sense to deactivate 'is copy'. What else would it show ?
 
269
    if(frame) {
 
270
        cbCopy->setChecked( frame->isCopy() );
 
271
        cbCopy->setEnabled( frame->frameSet() && frame->frameSet()->frame( 0 ) != frame ); // First one can't be a copy
 
272
    } else { // list of frames as input.
 
273
        KWFrame *f=allFrames.first();
 
274
        bool show=true;
 
275
        bool enabled=f->frameSet() && f->frameSet()->frame( 0 ) != f; // First one can't be a copy
 
276
        bool checked=f->isCopy();
 
277
        f=allFrames.next();
 
278
        while(f) {
 
279
            enabled=enabled || (f->frameSet() && f->frameSet()->frame( 0 ) != f);
 
280
            if(checked != f->isCopy()) show=false;
 
281
            f=allFrames.next();
 
282
        }
 
283
        if(! show) {
 
284
            cbCopy->setTristate();
 
285
            cbCopy->setNoChange();
 
286
        }
 
287
        else cbCopy->setChecked(checked);
 
288
        cbCopy->setEnabled( enabled );
 
289
    }
 
290
 
 
291
    // Well, for images, formulas etc. it doesn't make sense to activate 'is copy'. What else would it show ?
188
292
    if(frameType!=FT_TEXT)
189
293
        cbCopy->setEnabled( false );
190
294
 
192
296
    int column = 0;
193
297
 
194
298
    // Picture frame
195
 
    if(frameType==FT_PICTURE)
 
299
    if(frameType==FT_PICTURE
 
300
#if 0 // KWORD_HORIZONTAL_LINE
 
301
        || frameType == FT_HORZLINE
 
302
#endif
 
303
        )
196
304
    {
197
305
        cbAspectRatio = new QCheckBox (i18n("Retain original aspect ratio"),tab1);
198
 
        if ( frame->getFrameSet() )
199
 
            cbAspectRatio->setChecked( static_cast<KWPictureFrameSet *>( frame->getFrameSet() )->keepAspectRatio() );
200
 
        else
201
 
            cbAspectRatio->setChecked( true );
 
306
        connect( cbAspectRatio, SIGNAL(toggled(bool)),
 
307
             this, SLOT(slotKeepRatioToggled(bool)));
 
308
        bool show=true;
 
309
        bool on=true;
 
310
        if(frame) {
 
311
            if ( frame->frameSet() )
 
312
                on= static_cast<KWPictureFrameSet *>( frame->frameSet() )->keepAspectRatio();
 
313
        } else {
 
314
            KWFrame *f=allFrames.first();
 
315
            KWPictureFrameSet *fs = dynamic_cast<KWPictureFrameSet *> (f->frameSet());
 
316
            if(fs)
 
317
                on=fs->keepAspectRatio();
 
318
            f=allFrames.next();
 
319
            while(f) {
 
320
                KWPictureFrameSet *fs = dynamic_cast<KWPictureFrameSet *> (f->frameSet());
 
321
                if(fs)
 
322
                    if(on != fs->keepAspectRatio()) {
 
323
                        show=false;
 
324
                        break;
 
325
                    }
 
326
                f=allFrames.next();
 
327
            }
 
328
        }
 
329
        cbAspectRatio->setChecked( on );
 
330
        if(! show) {
 
331
            cbAspectRatio->setTristate();
 
332
            cbAspectRatio->setNoChange();
 
333
        }
202
334
        grid1->addWidget(cbAspectRatio, row, 0);
203
335
        ++row;
204
336
    }
209
341
    if(frameType==FT_TEXT)
210
342
    {
211
343
        // AutoCreateNewFrame policy.
212
 
        endOfFrame = new QGroupBox(i18n("If text is too long for frame:"), tab1 );
 
344
        endOfFrame = new QGroupBox(i18n("If Text is Too Long for Frame"), tab1 );
213
345
        grid1->addWidget( endOfFrame, row, 0 );
214
346
 
215
347
        eofGrid= new QGridLayout (endOfFrame, 4, 1, KDialog::marginHint(), KDialog::spacingHint());
229
361
        grp->insert( rNoShow );
230
362
 
231
363
        eofGrid->addRowSpacing( 0, KDialog::marginHint() + 5 );
232
 
 
233
 
        if(frame->getFrameBehaviour() == KWFrame::AutoExtendFrame) {
234
 
            rResizeFrame->setChecked(true);
235
 
        } else if (frame->getFrameBehaviour() == KWFrame::AutoCreateNewFrame) {
236
 
            rAppendFrame->setChecked(true);
 
364
        KWFrame::FrameBehavior fb;
 
365
        bool show=true;
 
366
        if(frame) {
 
367
            fb = frame->frameBehavior();
237
368
        } else {
238
 
            rNoShow->setChecked(true);
 
369
            KWFrame *f=allFrames.first();
 
370
            fb = f->frameBehavior();
 
371
            f=allFrames.next();
 
372
            while(f) {
 
373
                if(fb != f->frameBehavior()) {
 
374
                    show=false;
 
375
                    break;
 
376
                }
 
377
                f=allFrames.next();
 
378
            }
 
379
        }
 
380
        if(show) {
 
381
            if(fb == KWFrame::AutoExtendFrame) {
 
382
                rResizeFrame->setChecked(true);
 
383
            } else if (fb == KWFrame::AutoCreateNewFrame) {
 
384
                rAppendFrame->setChecked(true);
 
385
            } else {
 
386
                rNoShow->setChecked(true);
 
387
            }
239
388
        }
240
389
        column++;
241
 
    } else
242
 
    {
 
390
    } else {
243
391
        rResizeFrame = 0L;
244
392
        rAppendFrame = 0L;
245
393
        rNoShow = 0L;
246
394
    }
247
395
 
248
 
    // NewFrameBehaviour - now for all type of frames
249
 
    onNewPage = new QGroupBox(i18n("On new page creation:"),tab1);
 
396
    // NewFrameBehavior - now for all type of frames
 
397
    onNewPage = new QGroupBox(i18n("On New Page Creation"),tab1);
250
398
    grid1->addWidget( onNewPage, row, column );
251
399
 
252
400
    onpGrid = new QGridLayout( onNewPage, 4, 1, KDialog::marginHint(), KDialog::spacingHint() );
253
401
    reconnect = new QRadioButton (i18n ("Reconnect frame to current flow"), onNewPage);
254
402
    if ( rResizeFrame )
255
 
        connect( reconnect, SIGNAL( clicked() ), this, SLOT( setFrameBehaviourInputOn() ) );
 
403
        connect( reconnect, SIGNAL( clicked() ), this, SLOT( setFrameBehaviorInputOn() ) );
256
404
    onpGrid->addRowSpacing( 0, KDialog::marginHint() + 5 );
257
405
    onpGrid->addWidget( reconnect, 1, 0 );
258
406
 
259
407
    noFollowup = new QRadioButton (i18n ("Don't create a followup frame"), onNewPage);
260
408
    if ( rResizeFrame )
261
 
        connect( noFollowup, SIGNAL( clicked() ), this, SLOT( setFrameBehaviourInputOn() ) );
 
409
        connect( noFollowup, SIGNAL( clicked() ), this, SLOT( setFrameBehaviorInputOn() ) );
262
410
    onpGrid->addWidget( noFollowup, 2, 0 );
263
411
 
264
412
    copyRadio= new QRadioButton (i18n ("Place a copy of this frame"), onNewPage);
265
413
    if ( rResizeFrame )
266
 
        connect( copyRadio, SIGNAL( clicked() ), this, SLOT( setFrameBehaviourInputOff() ) );
 
414
        connect( copyRadio, SIGNAL( clicked() ), this, SLOT( setFrameBehaviorInputOff() ) );
267
415
    onpGrid->addWidget( copyRadio, 3, 0);
268
416
 
269
417
    enableOnNewPageOptions();
275
423
    grp2->insert( noFollowup );
276
424
    grp2->insert( copyRadio );
277
425
    grid1->addRowSpacing( row, onNewPage->height());
278
 
    if(frame->getNewFrameBehaviour() == KWFrame::Reconnect) {
279
 
        reconnect->setChecked(true);
280
 
    } else if(frame->getNewFrameBehaviour() == KWFrame::NoFollowup) {
281
 
        noFollowup->setChecked(true);
 
426
    KWFrame::NewFrameBehavior nfb;
 
427
    bool show=true;
 
428
    if(frame) {
 
429
        nfb = frame->newFrameBehavior();
282
430
    } else {
283
 
        copyRadio->setChecked(true);
284
 
        setFrameBehaviourInputOff();
285
 
    }
286
 
 
287
 
 
288
 
    // SideHeads definition - is that for text frames only ?
289
 
    if( frameType == FT_TEXT )
 
431
        KWFrame *f=allFrames.first();
 
432
        nfb = f->newFrameBehavior();
 
433
        f=allFrames.next();
 
434
        while(f) {
 
435
            if(nfb != f->newFrameBehavior()) {
 
436
                show=false;
 
437
                break;
 
438
            }
 
439
            f=allFrames.next();
 
440
        }
 
441
    }
 
442
    if(show) {
 
443
        if(nfb == KWFrame::Reconnect) {
 
444
            reconnect->setChecked(true);
 
445
        } else if(nfb == KWFrame::NoFollowup) {
 
446
            noFollowup->setChecked(true);
 
447
        } else {
 
448
            copyRadio->setChecked(true);
 
449
            setFrameBehaviorInputOff();
 
450
        }
 
451
    }
 
452
 
 
453
 
 
454
    // SideHeads definition - is that for text frames only ?   - Yes (TZ)
 
455
    if( false && frameType == FT_TEXT ) // disabled in the GUI for now! (TZ June 2002)
290
456
    {
291
457
        row++;
292
 
        sideHeads = new QGroupBox(i18n("SideHead definition"),tab1);
293
 
        sideHeads->setEnabled(false);
 
458
        sideHeads = new QGroupBox(i18n("SideHead Definition"),tab1);
 
459
        sideHeads->setEnabled(false); //###
294
460
        grid1->addWidget(sideHeads, row, 0);
295
461
 
296
462
        sideGrid = new QGridLayout( sideHeads, 4, 2, KDialog::marginHint(), KDialog::spacingHint() );
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 );
318
484
 
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) );
322
488
 
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..
326
492
    }
327
493
 
 
494
    cbAllFrames = new QCheckBox (i18n("Changes will be applied to all frames in frameset"),tab1);
 
495
    cbAllFrames->setChecked(frame!=0L);
 
496
    row++;
 
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 )));
 
501
    row++;
 
502
    grid1->addMultiCellWidget(cbProtectContent,row,row, 0, 1);
 
503
    if( frameType != FT_TEXT || frame!=0 && frame->frameSet()==0) {
 
504
        cbAllFrames->setChecked(false);
 
505
        cbAllFrames->hide();
 
506
        cbProtectContent->setChecked( false );
 
507
        cbProtectContent->hide();
 
508
    }
 
509
    else if ( frameType == FT_TEXT /*&& frame!=0 && frame->frameSet()*/ )
 
510
    {
 
511
        bool show=true;
 
512
        bool on=true;
 
513
        if(frame)
 
514
        {
 
515
            if ( frame->frameSet() )
 
516
                on= static_cast<KWTextFrameSet *>(frame->frameSet() )->textObject()->protectContent();
 
517
        }
 
518
        else
 
519
        {
 
520
            KWFrame *f=allFrames.first();
 
521
            KWTextFrameSet *fs = dynamic_cast<KWTextFrameSet *> (f->frameSet());
 
522
            if(fs)
 
523
                on=fs->textObject()->protectContent();
 
524
            f=allFrames.next();
 
525
            while(f) {
 
526
                KWTextFrameSet *fs = dynamic_cast<KWTextFrameSet *> (f->frameSet());
 
527
                if(fs)
 
528
                {
 
529
                    if(on != fs->textObject()->protectContent())
 
530
                    {
 
531
                        show=false;
 
532
                        break;
 
533
                    }
 
534
                }
 
535
                f=allFrames.next();
 
536
            }
 
537
        }
 
538
        cbProtectContent->setChecked( on );
 
539
        if(! show) {
 
540
            cbProtectContent->setTristate();
 
541
            cbProtectContent->setNoChange();
 
542
        }
 
543
    }
 
544
 
328
545
    for(int i=0;i < row;i++)
329
546
        grid1->setRowStretch( i, 0 );
330
547
    grid1->setRowStretch( row + 1, 1 );
331
548
}
332
549
 
333
 
 
334
 
void KWFrameDia::setupTab2() // TAB Text Runaround
335
 
{
336
 
    //kdDebug() << "setup tab 2 text runaround"<<endl;
337
 
 
338
 
    tab2 = addPage( i18n( "Text run around" ) );
339
 
 
340
 
    grid2 = new QGridLayout( tab2, 3, 2, KDialog::marginHint(), KDialog::spacingHint() );
341
 
 
342
 
    runGroup = new QGroupBox( i18n( "Text in other frames will:" ), tab2 );
343
 
 
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" ) );
 
552
 
 
553
    QVBoxLayout *tabLayout = new QVBoxLayout( tab2, 11, 6, "tabLayout");
 
554
 
 
555
    // First groupbox
 
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 );
 
562
 
 
563
    rRunNo = new QRadioButton( i18n( "Text will run &through this frame" ), runGroup );
 
564
    groupBox1Layout->addWidget( rRunNo, 0, 1 );
 
565
 
 
566
    rRunBounding = new QRadioButton( i18n( "Text will run &around the frame" ), runGroup );
 
567
    groupBox1Layout->addWidget( rRunBounding, 1, 1 );
 
568
 
 
569
    rRunSkip = new QRadioButton( i18n( "Text will &not run around this frame" ), runGroup );
 
570
    groupBox1Layout->addWidget( rRunSkip, 2, 1 );
345
571
 
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 );
352
577
 
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 );
358
583
 
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 );
364
 
 
365
 
    rRunNo = new QRadioButton( i18n( "&Run through this frame" ), runGroup );
366
 
    runGrid->addWidget( rRunNo, 1, 1 );
367
 
    connect( rRunNo, SIGNAL( clicked() ), this, SLOT( runNoClicked() ) );
368
 
 
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() ) );
372
 
 
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() ) );
376
 
 
377
 
    runGrid->addRowSpacing( 0, KDialog::marginHint() + 5 );
378
 
 
379
 
    grid2->addWidget( runGroup, 0, 0 );
380
 
    grid2->addMultiCellWidget( runGroup, 0, 0, 0, 1 );
381
 
 
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 );
386
 
 
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 );
395
 
 
396
 
    eRGap->setEnabled( false ); // ### not implemented currently
397
 
 
 
585
    QLabel *lRunSkip = new QLabel( runGroup );
 
586
    lRunSkip->setBackgroundPixmap( pixmap );
 
587
    lRunSkip->setFixedSize( pixmap.size() );
 
588
    groupBox1Layout->addWidget( lRunSkip, 2, 0 );
 
589
 
 
590
    tabLayout->addWidget( runGroup );
 
591
 
 
592
    // Second groupbox
 
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 );
 
599
 
 
600
    rRunLeft = new QRadioButton( i18n( "Run Around", "&Left" ), runSideGroup );
 
601
    runSideLayout->addWidget( rRunLeft, 0, 0 /*1*/ );
 
602
 
 
603
    rRunRight = new QRadioButton( i18n( "Run Around", "&Right" ), runSideGroup );
 
604
    runSideLayout->addWidget( rRunRight, 1, 0 /*1*/ );
 
605
 
 
606
    rRunBiggest = new QRadioButton( i18n( "Run Around", "Lon&gest side" ), runSideGroup );
 
607
    runSideLayout->addWidget( rRunBiggest, 2, 0 /*1*/ );
 
608
 
 
609
#if 0 // TODO icons!
 
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 );
 
615
 
 
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 );
 
621
 
 
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 );
 
627
#endif
 
628
 
 
629
    tabLayout->addWidget( runSideGroup );
 
630
 
 
631
    // [useless?] spacer
 
632
    QHBoxLayout *Layout1 = new QHBoxLayout( 0, 0, 6);
 
633
    QSpacerItem* spacer = new QSpacerItem( 10, 10, QSizePolicy::Expanding, QSizePolicy::Minimum );
 
634
    Layout1->addItem( spacer );
 
635
 
 
636
    QLabel *lRGap = new QLabel( i18n( "Distance between frame and text (%1):" ).arg(doc->getUnitName()), tab2 );
 
637
    Layout1->addWidget( lRGap );
 
638
 
 
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 );
 
647
 
 
648
 
 
649
    // Show current settings
 
650
 
 
651
    // Runaround
 
652
    bool show=true;
398
653
    KWFrame::RunAround ra = KWFrame::RA_NO;
399
654
    if ( frame )
400
655
        ra = frame->runAround();
401
 
    else
402
 
    {
403
 
        KWFrame *firstFrame = doc->getFirstSelectedFrame();
404
 
        if ( firstFrame )
405
 
            ra = firstFrame->runAround();
406
 
    }
407
 
 
408
 
    switch ( ra ) {
409
 
    case KWFrame::RA_NO: rRunNo->setChecked( true );
410
 
        break;
411
 
    case KWFrame::RA_BOUNDINGRECT: rRunBounding->setChecked( true );
412
 
        break;
413
 
    case KWFrame::RA_SKIP: rRunContur->setChecked( true );
414
 
        break;
415
 
    }
416
 
 
 
656
    else {
 
657
        KWFrame *f=allFrames.first();
 
658
        ra = f->runAround();
 
659
        f=allFrames.next();
 
660
        while(f) {
 
661
            if(ra != f->runAround()) show=false;
 
662
            f=allFrames.next();
 
663
        }
 
664
    }
 
665
 
 
666
    if(show) {
 
667
        switch ( ra ) {
 
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;
 
671
        }
 
672
    }
 
673
 
 
674
    // Runaround side
 
675
    show = true;
 
676
    KWFrame::RunAroundSide rs = KWFrame::RA_BIGGEST;
 
677
    if ( frame )
 
678
        rs = frame->runAroundSide();
 
679
    else {
 
680
        KWFrame *f=allFrames.first();
 
681
        rs = f->runAroundSide();
 
682
        f = allFrames.next();
 
683
        while(f) {
 
684
            if(rs != f->runAroundSide()) show=false;
 
685
            f=allFrames.next();
 
686
        }
 
687
    }
 
688
 
 
689
    if(show) {
 
690
        switch ( rs ) {
 
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;
 
694
        }
 
695
    }
 
696
 
 
697
    // Runaround gap
 
698
    show=true;
417
699
    double ragap = 0;
418
700
    if ( frame )
419
701
        ragap = frame->runAroundGap();
420
 
    else
421
 
    {
422
 
        KWFrame *firstFrame = doc->getFirstSelectedFrame();
423
 
        if ( firstFrame )
424
 
            ragap = firstFrame->runAroundGap();
 
702
    else {
 
703
        KWFrame *f=allFrames.first();
 
704
        ragap = f->runAroundGap();
 
705
        f=allFrames.next();
 
706
        while(f) {
 
707
            if(ragap != f->runAroundGap()) show=false;
 
708
            f=allFrames.next();
 
709
        }
425
710
    }
426
711
 
427
 
    QString str;
428
 
    str.setNum( KWUnit::userValue( ragap, doc->getUnit() ) );
429
 
    eRGap->setText( str );
 
712
    double str=0.0;
 
713
    if(show)
 
714
        str = KoUnit::ptToUnit( ragap, doc->getUnit() );
 
715
    eRGap->setValue( str );
 
716
 
430
717
 
431
718
    enableRunAround();
432
719
 
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() ) );
434
722
}
435
723
 
436
724
void KWFrameDia::setupTab3(){ // TAB Frameset
437
725
    /*
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.
444
 
 */
 
732
     */
445
733
    //kdDebug() << "setup tab 3 frameSet"<<endl;
446
 
    tab3 = addPage( i18n( "Connect text frames" ) );
447
 
 
448
 
    grid3 = new QGridLayout( tab3, 3, 1, KDialog::marginHint(), KDialog::spacingHint() );
449
 
 
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 );
453
 
 
454
 
    lFrameSList = new QListView( tab3 );
455
 
    lFrameSList->addColumn( i18n( "Nr." ) );
456
 
    lFrameSList->addColumn( i18n( "Frameset name" ) );
 
734
    tab3 = addPage( i18n( "Connect Text Frames" ) );
 
735
 
 
736
    QVBoxLayout *tabLayout = new QVBoxLayout( tab3, 11, 6);
 
737
 
 
738
    QButtonGroup *myGroup = new QButtonGroup(this);
 
739
    myGroup->hide();
 
740
 
 
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()));
 
746
 
 
747
    QHBoxLayout *layout2 = new QHBoxLayout( 0, 0, 6);
 
748
    QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
 
749
    layout2->addItem( spacer );
 
750
 
 
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 );
459
 
 
 
756
    connect( lFrameSList, SIGNAL(selectionChanged ()),this,SLOT(selectExistingFrameset ()) );
 
757
    connect (lFrameSList, SIGNAL( selectionChanged()), this, SLOT(ensureValidFramesetSelected()));
 
758
 
 
759
    layout2->addWidget( lFrameSList );
 
760
    tabLayout->addLayout( layout2 );
 
761
 
 
762
    rNewFrameset = new QRadioButton( tab3);
 
763
    rNewFrameset->setText( i18n( "Create a new frameset" ) );
 
764
    tabLayout->addWidget( rNewFrameset );
 
765
    myGroup->insert(rNewFrameset,2);
 
766
 
 
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 );
 
772
 
 
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 );
 
777
 
 
778
    eFrameSetName = new QLineEdit( tab3 );
 
779
    layout1->addWidget( eFrameSetName );
 
780
    tabLayout->addLayout( layout1 );
 
781
 
 
782
    int amount=0;
 
783
    // now fill the gui.
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 )
463
787
            continue;
464
788
        if ( fs->type() != FT_TEXT || fs->isHeaderOrFooter() )
465
789
            continue;
 
790
        if ( fs->frameSetInfo() == KWFrameSet::FI_FOOTNOTE )
 
791
            continue;
466
792
        if ( fs->getGroupManager() )
467
793
            continue;
468
 
        if ( fs->getNumFrames() == 0 ) // deleted frameset
 
794
        if ( fs->isDeleted() )
469
795
            continue;
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 )
 
799
        amount++;
 
800
        if( frame && frame->frameSet() == fs ) {
474
801
            lFrameSList->setSelected(item, TRUE );
475
 
    }
476
 
 
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 );
482
 
    }
 
802
            oldFrameSetName = fs->getName();
 
803
            rExistingFrameset->setChecked(true);
 
804
        }
 
805
    }
 
806
    if(amount==0) {
 
807
        rNewFrameset->setChecked(/*true*/false);
 
808
        rNewFrameset->setEnabled(false);
 
809
        rExistingFrameset->setEnabled(false);
 
810
        lFrameSList->setEnabled(false);
 
811
    }
 
812
    //we can't create a new frame when we select
 
813
    //multi frame!!!!
 
814
    if ( allFrames.count() > 1 ) {
 
815
        rNewFrameset->setChecked(false);
 
816
        rNewFrameset->setEnabled(false);
 
817
        myGroup->setRadioButtonExclusive( false );
 
818
    }
 
819
    if(frame && frame->frameSet() == 0) {
 
820
        oldFrameSetName = doc->generateFramesetName( i18n( "Text Frameset %1" ) );
 
821
        rNewFrameset->setChecked(true);
 
822
    }
 
823
    eFrameSetName->setText( oldFrameSetName );
483
824
 
484
825
    connect( lFrameSList, SIGNAL( currentChanged( QListViewItem * ) ),
485
826
             this, SLOT( connectListSelected( QListViewItem * ) ) );
486
 
    grid3->addWidget( lFrameSList, 1, 0 );
487
 
 
488
 
    QHBox *row = new QHBox( tab3 );
489
 
    row->setSpacing( 5 );
490
 
    if (! frame->getFrameSet())
491
 
    {
492
 
        ( void )new QLabel( i18n( "Name of new frameset:" ), row );
493
 
        oldFrameSetName = doc->generateFramesetName( i18n( "Text Frameset %1" ) );
494
 
    }
495
 
    else
496
 
    {
497
 
        ( void )new QLabel( i18n( "Name of frameset:" ), row );
498
 
        oldFrameSetName = frame->getFrameSet()->getName();
499
 
    }
500
 
    eFrameSetName = new QLineEdit( row );
501
 
    eFrameSetName->setText( oldFrameSetName );
502
 
    connect(eFrameSetName, SIGNAL(textChanged ( const QString & )),this,SLOT(textNameFrameChanged ( const QString & )));
503
 
 
504
 
    grid3->addWidget( row, 2, 0 );
505
 
 
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)) );
 
833
}
 
834
 
 
835
void KWFrameDia::selectExistingFrameset() {
 
836
    rExistingFrameset->setChecked(true);
 
837
}
 
838
 
 
839
void KWFrameDia::selectNewFrameset(bool on) {
 
840
    if(!on) return;
 
841
 
 
842
    QListViewItem *frameSetItem  = lFrameSList->selectedItem();
 
843
    if ( !frameSetItem)
 
844
        return;
 
845
    QString str = frameSetItem->text( 0 );
 
846
    KWFrameSet *fs = doc->frameSet(str.toInt() - 1);
 
847
 
 
848
    frameSetItem->setText(1, fs->getName() );
507
849
}
508
850
 
509
851
void KWFrameDia::textNameFrameChanged ( const QString &text )
510
852
{
511
 
    enableButtonOK( !text.isEmpty() );
 
853
    if(rExistingFrameset->isChecked()) {
 
854
        QListViewItem *item = lFrameSList->selectedItem();
 
855
        if ( !item )
 
856
            return;
 
857
        item->setText(1, text );
 
858
    }
 
859
    if(rNewFrameset->isChecked() || rExistingFrameset->isChecked()) //when one of both is clicked.
 
860
        enableButtonOK( !text.isEmpty() );
 
861
    else
 
862
        enableButtonOK( true );
512
863
}
513
864
 
514
 
void KWFrameDia::setupTab4(){ // TAB Geometry
515
 
    //kdDebug() << "setup tab 4 geometry"<<endl;
 
865
void KWFrameDia::setupTab4() { // TAB Geometry
 
866
    noSignal = true;
516
867
 
517
868
    tab4 = addPage( i18n( "Geometry" ) );
518
869
    grid4 = new QGridLayout( tab4, 4, 1, KDialog::marginHint(), KDialog::spacingHint() );
523
874
    int row = 0;
524
875
    grid4->addMultiCellWidget( floating, row, row, 0, 1 );
525
876
 
 
877
    row++;
 
878
    protectSize = new QCheckBox( i18n("Protect size and position"), tab4);
 
879
    grid4->addMultiCellWidget( protectSize, row, row, 0, 1 );
 
880
    connect( protectSize, SIGNAL( toggled(bool) ), this, SLOT( slotProtectSizeToggled(bool) ) );
 
881
 
526
882
    /* ideally the following properties could be given to any floating frame:
527
883
       Position: (y)
528
884
        Top of frame
542
898
        Absolute
543
899
    */
544
900
 
545
 
 
546
 
    grp1 = new QGroupBox( i18n("Position in %1").arg(doc->getUnitName()), tab4 );
 
901
    grp1 = new QGroupBox( i18n("Position (%1)").arg(doc->getUnitName()), tab4 );
547
902
    pGrid = new QGridLayout( grp1, 5, 2, KDialog::marginHint(), KDialog::spacingHint() );
548
903
 
549
904
    lx = new QLabel( i18n( "Left:" ), grp1 );
550
905
    lx->resize( lx->sizeHint() );
551
906
    pGrid->addWidget( lx, 1, 0 );
552
907
 
553
 
    sx = new QLineEdit( grp1 );
554
 
 
555
 
    sx->setText( "0.00" );
556
 
    sx->setMaxLength( 16 );
557
 
    sx->setEchoMode( QLineEdit::Normal );
558
 
    sx->setFrame( true );
 
908
    sx = new KDoubleNumInput( grp1 );
 
909
 
 
910
    sx->setValue( 0.0 );
 
911
    sx->setRange(0, 9999, 1,  false);
 
912
 
559
913
    sx->resize( sx->sizeHint() );
560
914
    pGrid->addWidget( sx, 2, 0 );
561
915
 
563
917
    ly->resize( ly->sizeHint() );
564
918
    pGrid->addWidget( ly, 1, 1 );
565
919
 
566
 
    sy = new QLineEdit( grp1 );
567
 
 
568
 
    sy->setText( "0.00" );
569
 
    sy->setMaxLength( 16 );
570
 
    sy->setEchoMode( QLineEdit::Normal );
571
 
    sy->setFrame( true );
 
920
    sy = new KDoubleNumInput( grp1 );
 
921
    sy->setRange(0, 9999, 1,  false);
 
922
    sy->setValue( 0.0 );
572
923
    sy->resize( sy->sizeHint() );
573
924
    pGrid->addWidget( sy, 2, 1 );
574
925
 
576
927
    lw->resize( lw->sizeHint() );
577
928
    pGrid->addWidget( lw, 3, 0 );
578
929
 
579
 
    sw = new QLineEdit( grp1 );
 
930
    sw = new KDoubleNumInput( grp1 );
580
931
 
581
 
    sw->setText( "0.00" );
582
 
    sw->setMaxLength( 16 );
583
 
    sw->setEchoMode( QLineEdit::Normal );
584
 
    sw->setFrame( true );
 
932
    sw->setValue( 0.0 );
585
933
    sw->resize( sw->sizeHint() );
 
934
    sw->setRange(0, 9999, 1,  false);
 
935
    connect( sw, SIGNAL(valueChanged(double)),
 
936
             this, SLOT(slotUpdateHeightForWidth(double)) );
 
937
 
586
938
    pGrid->addWidget( sw, 4, 0 );
587
939
 
588
940
    lh = new QLabel( i18n( "Height:" ), grp1 );
589
941
    lh->resize( lh->sizeHint() );
590
942
    pGrid->addWidget( lh, 3, 1 );
591
943
 
592
 
    sh = new QLineEdit( grp1 );
 
944
    sh = new KDoubleNumInput( grp1 );
 
945
    connect( sh, SIGNAL(valueChanged(double)),
 
946
             this, SLOT(slotUpdateWidthForHeight(double)) );
593
947
 
594
 
    sh->setText( "0.00" );
595
 
    sh->setMaxLength( 16 );
596
 
    sh->setEchoMode( QLineEdit::Normal );
597
 
    sh->setFrame( true );
 
948
    sh->setValue( 0.0 );
598
949
    sh->resize( sh->sizeHint() );
 
950
    sh->setRange(0, 9999, 1,  false);
 
951
 
599
952
    pGrid->addWidget( sh, 4, 1 );
600
953
 
601
954
    pGrid->addRowSpacing( 0, KDialog::spacingHint() + 5 );
602
955
 
603
 
    grid4->addWidget( grp1, ++row, 0 );
604
 
 
605
 
    grp2 = new QGroupBox( i18n("Margins in %1").arg(doc->getUnitName()), tab4 );
606
 
    mGrid = new QGridLayout( grp2, 5, 2, KDialog::marginHint(), KDialog::spacingHint() );
607
 
 
608
 
    lml = new QLabel( i18n( "Left:" ), grp2 );
609
 
    lml->resize( lml->sizeHint() );
610
 
    mGrid->addWidget( lml, 1, 0 );
611
 
 
612
 
    sml = new QLineEdit( grp2 );
613
 
 
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 );
620
 
 
621
 
    lmr = new QLabel( i18n( "Right:" ), grp2 );
622
 
    lmr->resize( lmr->sizeHint() );
623
 
    mGrid->addWidget( lmr, 1, 1 );
624
 
 
625
 
    smr = new QLineEdit( grp2 );
626
 
 
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 );
633
 
 
634
 
    lmt = new QLabel( i18n( "Top:" ), grp2 );
635
 
    lmt->resize( lmt->sizeHint() );
636
 
    mGrid->addWidget( lmt, 3, 0 );
637
 
 
638
 
    smt = new QLineEdit( grp2 );
639
 
 
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 );
646
 
 
647
 
    lmb = new QLabel( i18n( "Bottom:" ), grp2 );
648
 
    lmb->resize( lmb->sizeHint() );
649
 
    mGrid->addWidget( lmb, 3, 1 );
650
 
 
651
 
    smb = new QLineEdit( grp2 );
652
 
 
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 );
659
 
 
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
666
 
    grp2->hide();
667
 
 
668
 
    mGrid->addRowSpacing( 0, KDialog::spacingHint() + 5 );
669
 
 
670
 
    /// ##### grid4->addWidget( grp2, ++row, 0 );
671
 
 
672
 
    double l, r, t, b;
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() ) ) ));
678
 
 
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 ) );
687
 
 
688
 
    bool disable = false;
689
 
    if ( doc->isOnlyOneFrameSelected() )
 
956
    row++;
 
957
    grid4->addMultiCellWidget( grp1, row, row, 0,1 );
 
958
 
 
959
    if(frame) {
 
960
        QGroupBox *grp2 = new QGroupBox( i18n("Margins (%1)").arg(doc->getUnitName()), tab4 );
 
961
        mGrid = new QGridLayout( grp2, 6, 2, KDialog::marginHint(), KDialog::spacingHint() );
 
962
 
 
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);
 
966
 
 
967
        lml = new QLabel( i18n( "Left:" ), grp2 );
 
968
        lml->resize( lml->sizeHint() );
 
969
        mGrid->addWidget( lml, 2, 0 );
 
970
 
 
971
        m_inputLeftMargin = new KDoubleNumInput( grp2 );
 
972
 
 
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 );
 
977
 
 
978
        lmr = new QLabel( i18n( "Right:" ), grp2 );
 
979
        lmr->resize( lmr->sizeHint() );
 
980
        mGrid->addWidget( lmr, 2, 1 );
 
981
 
 
982
        m_inputRightMargin = new KDoubleNumInput( grp2 );
 
983
 
 
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 );
 
988
 
 
989
        lmt = new QLabel( i18n( "Top:" ), grp2 );
 
990
        lmt->resize( lmt->sizeHint() );
 
991
        mGrid->addWidget( lmt, 4, 0 );
 
992
 
 
993
        m_inputTopMargin = new KDoubleNumInput( grp2 );
 
994
 
 
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);
 
998
 
 
999
        mGrid->addWidget( m_inputTopMargin, 5, 0 );
 
1000
 
 
1001
        lmb = new QLabel( i18n( "Bottom:" ), grp2 );
 
1002
        lmb->resize( lmb->sizeHint() );
 
1003
        mGrid->addWidget( lmb, 4, 1 );
 
1004
 
 
1005
        m_inputBottomMargin = new KDoubleNumInput( grp2 );
 
1006
 
 
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 );
 
1011
 
 
1012
 
 
1013
        oldMarginLeft=m_inputLeftMargin->value();
 
1014
        oldMarginRight=m_inputRightMargin->value();
 
1015
        oldMarginTop=m_inputTopMargin->value();
 
1016
        oldMarginBottom=m_inputBottomMargin->value();
 
1017
 
 
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 )));
 
1022
        row++;
 
1023
        grid4->addMultiCellWidget( grp2, row, row, 0,1 );
 
1024
        mGrid->addRowSpacing( 0, KDialog::spacingHint() + 5 );
 
1025
 
 
1026
        if (tab1 && cbProtectContent )
 
1027
        {
 
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 );
 
1034
        }
 
1035
    }
 
1036
    else
690
1037
    {
691
 
        KWFrame * theFrame = doc->getFirstSelectedFrame();
692
 
 
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() );
697
 
 
698
 
        sx->setText( QString::number( oldX ) );
699
 
        sy->setText( QString::number( oldY ) );
700
 
        sw->setText( QString::number( oldW ) );
701
 
        sh->setText( QString::number( oldH ) );
702
 
 
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();
708
 
 
709
 
        if ( theFrame->getFrameSet()->getGroupManager() )
 
1038
        m_inputLeftMargin = 0L;
 
1039
        m_inputRightMargin = 0L;
 
1040
        m_inputTopMargin = 0L;
 
1041
        m_inputBottomMargin = 0L;
 
1042
    }
 
1043
 
 
1044
 
 
1045
    bool isMainFrame = false;
 
1046
    if ( frame ) {
 
1047
        // is single frame dia. Fill position strings and checkboxes now.
 
1048
 
 
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 );
 
1051
 
 
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() ) );
 
1056
 
 
1057
        calcRatio();
 
1058
 
 
1059
        // userValue leads to some rounding -> store old values from the ones
 
1060
        // displayed, so that the "change detection" in apply() works.
 
1061
        oldX = sx->value();
 
1062
        oldY = sy->value();
 
1063
        oldW = sw->value();
 
1064
        oldH = sh->value();
 
1065
 
 
1066
        KWFrameSet * fs = frame->frameSet();
 
1067
        // Can't change geometry of main WP frame or headers/footers
 
1068
        if ( fs && fs->isMainFrameset() )
 
1069
            isMainFrame = true;
 
1070
 
 
1071
        if ( fs && fs->getGroupManager() )
710
1072
            floating->setText( i18n( "Table is inline" ) );
711
1073
 
712
1074
        floating->setChecked( frameSetFloating );
713
 
 
714
 
        if ( frameSetFloating )
715
 
            slotFloatingToggled( true );
716
 
 
717
 
        // Can't change geometry of main WP frame or headers/footers
718
 
        if ( theFrame->getFrameSet()->isHeaderOrFooter() ||
719
 
             theFrame->getFrameSet()->isMainFrameset() )
720
 
            disable = true;
 
1075
        protectSize->setChecked( frameSetProtectedSize);
 
1076
    } else {
 
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 );
 
1082
 
 
1083
        if ( fs->isMainFrameset() ) {
 
1084
            isMainFrame = true;
 
1085
        }
 
1086
 
 
1087
        bool table=fs->getGroupManager();
 
1088
        if(table)
 
1089
            fs=fs->getGroupManager();
 
1090
        bool inlineframe =fs->isFloating();
 
1091
        floating->setChecked( inlineframe );
 
1092
 
 
1093
        f=allFrames.next();
 
1094
        while(f) {
 
1095
            KWFrameSet *fs=f->frameSet();
 
1096
            if(ps != fs->isProtectSize()) {
 
1097
                protectSize->setTristate();
 
1098
                protectSize->setNoChange();
 
1099
            }
 
1100
            if ( fs->isMainFrameset() ) {
 
1101
                isMainFrame = true;
 
1102
            }
 
1103
            if(fs->getGroupManager()) //table
 
1104
                fs=fs->getGroupManager();
 
1105
            else
 
1106
                table=false;
 
1107
 
 
1108
            if(inlineframe != fs->isFloating()) {
 
1109
                floating->setTristate();
 
1110
                floating->setNoChange();
 
1111
            }
 
1112
 
 
1113
            f=allFrames.next();
 
1114
        }
 
1115
        if(table)
 
1116
            floating->setText( i18n( "Table is inline" ) );
721
1117
    }
722
 
    else
723
 
        disable = true;
724
1118
 
725
 
    if ( disable )
726
 
    {
727
 
        grp2->hide( );
 
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 );
733
 
    }
734
 
 
735
 
    //kdDebug() << "setup tab 4 exit"<<endl;
736
 
}
737
 
 
738
 
 
739
 
 
740
 
 
741
 
void KWFrameDia::uncheckAllRuns()
742
 
{
743
 
    rRunNo->setChecked( false );
744
 
    rRunBounding->setChecked( false );
745
 
    rRunContur->setChecked( false );
746
 
}
747
 
 
748
 
void KWFrameDia::runNoClicked()
749
 
{
750
 
    uncheckAllRuns();
751
 
    rRunNo->setChecked( true );
752
 
}
753
 
 
754
 
void KWFrameDia::runBoundingClicked()
755
 
{
756
 
    uncheckAllRuns();
757
 
    rRunBounding->setChecked( true );
758
 
}
759
 
 
760
 
void KWFrameDia::runConturClicked()
761
 
{
762
 
 
763
 
    uncheckAllRuns();
764
 
    rRunContur->setChecked( true );
 
1133
        protectSize->setEnabled( false );
 
1134
    }
 
1135
 
 
1136
    if ( isMainFrame )
 
1137
    {
 
1138
        grp1->hide();
 
1139
        floating->hide( );
 
1140
        protectSize->hide();
 
1141
    }
 
1142
    noSignal=false;
 
1143
}
 
1144
 
 
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() );
 
1148
 
 
1149
    int row=0;
 
1150
    if(! frame) {
 
1151
        overwriteColor = new QCheckBox (i18n("Set new color on all selected frames"), tab5);
 
1152
        grid5->addMultiCellWidget(overwriteColor,row,row,0,1);
 
1153
        row++;
 
1154
    }
 
1155
    brushPreview=new KWBrushStylePreview(tab5);
 
1156
    grid5->addMultiCellWidget(brushPreview,row,5,1,1);
 
1157
 
 
1158
    QLabel *l = new QLabel( i18n( "Background color:" ), tab5 );
 
1159
 
 
1160
    grid5->addWidget(l,row++,0);
 
1161
 
 
1162
    brushColor = new KColorButton( Qt::white, tab5 );
 
1163
    grid5->addWidget(brushColor,row++,0);
 
1164
 
 
1165
    connect( brushColor, SIGNAL( changed( const QColor & ) ),
 
1166
        this, SLOT( updateBrushConfiguration() ) );
 
1167
 
 
1168
 
 
1169
    l = new QLabel( i18n( "Background style:" ), tab5 );
 
1170
    grid5->addWidget(l,row++,0);
 
1171
 
 
1172
    brushStyle = new QComboBox( false,tab5, "BStyle" );
 
1173
    grid5->addWidget(brushStyle,row++,0);
 
1174
 
 
1175
    QSpacerItem* spacer = new QSpacerItem( 10, 10, QSizePolicy::Minimum, QSizePolicy::Expanding);
 
1176
    grid5->addItem( spacer,row,0 );
 
1177
 
 
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() ) );
 
1195
 
 
1196
    initComboStyleBrush();
 
1197
    updateBrushConfiguration();
 
1198
}
 
1199
 
 
1200
void KWFrameDia::slotProtectContentChanged( bool b)
 
1201
{
 
1202
    if (tab4 && !noSignal && m_inputLeftMargin)
 
1203
    {
 
1204
        m_inputLeftMargin->setEnabled( !b );
 
1205
        m_inputRightMargin->setEnabled( !b );
 
1206
        m_inputTopMargin->setEnabled( !b );
 
1207
        m_inputBottomMargin->setEnabled( !b );
 
1208
        synchronize->setEnabled( !b);
 
1209
    }
 
1210
}
 
1211
 
 
1212
void KWFrameDia::slotUpdateWidthForHeight(double height)
 
1213
{
 
1214
    if ( !cbAspectRatio || cbAspectRatio->state() != QButton::NoChange)
 
1215
        return;
 
1216
    if ( heightByWidthRatio == 0 )
 
1217
        return; // avoid DBZ
 
1218
    sw->setValue( height / heightByWidthRatio );
 
1219
 
 
1220
}
 
1221
 
 
1222
void KWFrameDia::slotUpdateHeightForWidth( double width )
 
1223
{
 
1224
    if ( !cbAspectRatio || cbAspectRatio->state() != QButton::NoChange)
 
1225
        return;
 
1226
    sh->setValue( width * heightByWidthRatio );
 
1227
}
 
1228
 
 
1229
void KWFrameDia::slotKeepRatioToggled(bool on)
 
1230
{
 
1231
    if ( !on || !sw || !sh) return;
 
1232
    calcRatio();
 
1233
}
 
1234
void KWFrameDia::ensureValidFramesetSelected()
 
1235
{
 
1236
    enableButtonOK( rNewFrameset->isChecked() || rExistingFrameset->isChecked() && lFrameSList->selectedItem() != NULL);
 
1237
}
 
1238
 
 
1239
void KWFrameDia::calcRatio()
 
1240
{
 
1241
    if ( sw->value() == 0 )
 
1242
        heightByWidthRatio = 1.0; // arbitrary
 
1243
    else
 
1244
        heightByWidthRatio = sh->value() / sw->value();
 
1245
}
 
1246
 
 
1247
void KWFrameDia::initComboStyleBrush()
 
1248
{
 
1249
    bool allFramesSame=true;
 
1250
    if ( frame )
 
1251
        newBrushStyle = frame->backgroundColor();
 
1252
    else {
 
1253
        KWFrame *f=allFrames.first();
 
1254
        newBrushStyle = f->backgroundColor();
 
1255
        f=allFrames.next();
 
1256
        while(f) {
 
1257
            if(newBrushStyle != f->backgroundColor()) {
 
1258
                allFramesSame=false;
 
1259
                break;
 
1260
            }
 
1261
            f=allFrames.next();
 
1262
        }
 
1263
        overwriteColor->setChecked(allFramesSame);
 
1264
    }
 
1265
 
 
1266
 
 
1267
    switch ( newBrushStyle.style() )
 
1268
    {
 
1269
        case NoBrush:
 
1270
            brushStyle->setCurrentItem( 0 );
 
1271
            break;
 
1272
        case SolidPattern:
 
1273
            brushStyle->setCurrentItem( 1 );
 
1274
            break;
 
1275
        case Dense1Pattern:
 
1276
            brushStyle->setCurrentItem( 2 );
 
1277
            break;
 
1278
        case Dense2Pattern:
 
1279
            brushStyle->setCurrentItem( 3 );
 
1280
            break;
 
1281
        case Dense3Pattern:
 
1282
            brushStyle->setCurrentItem( 4 );
 
1283
            break;
 
1284
        case Dense4Pattern:
 
1285
            brushStyle->setCurrentItem( 5 );
 
1286
            break;
 
1287
        case Dense5Pattern:
 
1288
            brushStyle->setCurrentItem( 6 );
 
1289
            break;
 
1290
        case Dense6Pattern:
 
1291
            brushStyle->setCurrentItem( 7 );
 
1292
            break;
 
1293
        case Dense7Pattern:
 
1294
            brushStyle->setCurrentItem( 8 );
 
1295
            break;
 
1296
        case HorPattern:
 
1297
            brushStyle->setCurrentItem( 9 );
 
1298
            break;
 
1299
        case VerPattern:
 
1300
            brushStyle->setCurrentItem( 10 );
 
1301
            break;
 
1302
        case CrossPattern:
 
1303
            brushStyle->setCurrentItem( 11 );
 
1304
            break;
 
1305
        case BDiagPattern:
 
1306
            brushStyle->setCurrentItem( 12 );
 
1307
            break;
 
1308
        case FDiagPattern:
 
1309
            brushStyle->setCurrentItem( 13 );
 
1310
            break;
 
1311
        case DiagCrossPattern:
 
1312
            brushStyle->setCurrentItem( 14 );
 
1313
            break;
 
1314
        case CustomPattern:
 
1315
            break;
 
1316
    }
 
1317
    QColor col=newBrushStyle.color();
 
1318
    col=col.isValid() ? col : QApplication::palette().color( QPalette::Active, QColorGroup::Base );
 
1319
 
 
1320
    brushColor->setColor( col );
 
1321
}
 
1322
 
 
1323
QBrush KWFrameDia::frameBrushStyle()
 
1324
{
 
1325
    QBrush brush;
 
1326
 
 
1327
    switch ( brushStyle->currentItem() )
 
1328
    {
 
1329
        case 0:
 
1330
            brush.setStyle( NoBrush );
 
1331
            break;
 
1332
        case 1:
 
1333
            brush.setStyle( SolidPattern );
 
1334
            break;
 
1335
        case 2:
 
1336
            brush.setStyle( Dense1Pattern );
 
1337
            break;
 
1338
        case 3:
 
1339
            brush.setStyle( Dense2Pattern );
 
1340
            break;
 
1341
        case 4:
 
1342
            brush.setStyle( Dense3Pattern );
 
1343
            break;
 
1344
        case 5:
 
1345
            brush.setStyle( Dense4Pattern );
 
1346
            break;
 
1347
        case 6:
 
1348
            brush.setStyle( Dense5Pattern );
 
1349
            break;
 
1350
        case 7:
 
1351
            brush.setStyle( Dense6Pattern );
 
1352
            break;
 
1353
        case 8:
 
1354
            brush.setStyle( Dense7Pattern );
 
1355
            break;
 
1356
        case 9:
 
1357
            brush.setStyle( HorPattern );
 
1358
            break;
 
1359
        case 10:
 
1360
            brush.setStyle( VerPattern );
 
1361
            break;
 
1362
        case 11:
 
1363
            brush.setStyle( CrossPattern );
 
1364
            break;
 
1365
        case 12:
 
1366
            brush.setStyle( BDiagPattern );
 
1367
            break;
 
1368
        case 13:
 
1369
            brush.setStyle( FDiagPattern );
 
1370
            break;
 
1371
        case 14:
 
1372
            brush.setStyle( DiagCrossPattern );
 
1373
            break;
 
1374
    }
 
1375
 
 
1376
    brush.setColor( brushColor->color() );
 
1377
 
 
1378
    return brush;
 
1379
}
 
1380
 
 
1381
void KWFrameDia::updateBrushConfiguration()
 
1382
{
 
1383
    if(brushStyle->currentItem()==0) {
 
1384
        brushPreview->hide();
 
1385
    } else {
 
1386
        brushPreview->show();
 
1387
        brushPreview->setBrush(frameBrushStyle());
 
1388
        brushPreview->repaint(true);
 
1389
    }
765
1390
}
766
1391
 
767
1392
// Called when "reconnect" or "no followup" is checked
768
 
void KWFrameDia::setFrameBehaviourInputOn() {
 
1393
void KWFrameDia::setFrameBehaviorInputOn() {
769
1394
    if ( tab4 && floating->isChecked() )
770
1395
        return;
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);
776
1401
        } else {
777
1402
            rNoShow->setChecked(true);
783
1408
}
784
1409
 
785
1410
// Called when "place a copy" is checked
786
 
void KWFrameDia::setFrameBehaviourInputOff() {
 
1411
void KWFrameDia::setFrameBehaviorInputOff() {
787
1412
    if ( tab4 && floating->isChecked() )
788
1413
        return;
789
1414
    if( rAppendFrame && rResizeFrame && rNoShow && rAppendFrame->isEnabled() ) {
790
1415
        if(rResizeFrame->isChecked()) {
791
 
            frameBehaviour=KWFrame::AutoExtendFrame;
 
1416
            frameBehavior=KWFrame::AutoExtendFrame;
792
1417
        } else if ( rAppendFrame->isChecked()) {
793
 
            frameBehaviour=KWFrame::AutoCreateNewFrame;
 
1418
            frameBehavior=KWFrame::AutoCreateNewFrame;
794
1419
        } else {
795
 
            frameBehaviour=KWFrame::Ignore;
 
1420
            frameBehavior=KWFrame::Ignore;
796
1421
        }
797
1422
        // In "Place a copy" mode, we can't have "create new page if text too long"
798
1423
        if ( rAppendFrame->isChecked() )
803
1428
    }
804
1429
}
805
1430
 
 
1431
void KWFrameDia::slotProtectSizeToggled(bool b)
 
1432
{
 
1433
    grp1->setEnabled( !b && !floating->isChecked());
 
1434
}
 
1435
 
806
1436
void KWFrameDia::slotFloatingToggled(bool b)
807
1437
{
808
 
    grp1->setEnabled( !b ); // Position doesn't make sense for a floating frame
 
1438
    grp1->setEnabled( !b && !protectSize->isChecked()); // Position doesn't make sense for a floating frame
809
1439
    if (tab1 && rAppendFrame && rResizeFrame && rNoShow ) {
810
1440
        cbCopy->setEnabled( !b ); // 'copy' irrelevant for floating frames.
811
1441
        if ( rAppendFrame )
829
1459
    enableRunAround();
830
1460
}
831
1461
 
 
1462
void KWFrameDia::slotMarginsChanged( double val)
 
1463
{
 
1464
    if ( synchronize->isChecked() && !noSignal && m_inputLeftMargin )
 
1465
    {
 
1466
        noSignal = true;
 
1467
        m_inputLeftMargin->setValue( val );
 
1468
        m_inputBottomMargin->setValue( val );
 
1469
        m_inputRightMargin->setValue( val );
 
1470
        m_inputTopMargin->setValue( val );
 
1471
        noSignal = false;
 
1472
    }
 
1473
}
 
1474
 
832
1475
// Enable or disable the "on new page" options
833
1476
void KWFrameDia::enableOnNewPageOptions()
834
1477
{
842
1485
 
843
1486
        if( frameType != FT_TEXT )
844
1487
            reconnect->setEnabled( false );
845
 
        else
846
 
        {
847
 
            KWFrameSet *fs = frame->getFrameSet(); // 0 when creating a frame
848
 
            if ( fs && fs->isHeaderOrFooter() )
 
1488
        else if(frame) {
 
1489
            KWFrameSet *fs = frame->frameSet(); // 0 when creating a frame
 
1490
            if ( fs && (fs->isHeaderOrFooter() || fs->isFootEndNote() ))
849
1491
            {
850
1492
                reconnect->setEnabled( false );
851
1493
                noFollowup->setEnabled( false );
858
1500
{
859
1501
    if ( tab2 )
860
1502
    {
861
 
        if ( tab4 && floating->isChecked() )
 
1503
        if ( tab4 && floating->isChecked() ) {
862
1504
            runGroup->setEnabled( false ); // Runaround options don't make sense for floating frames
863
 
        else
 
1505
        } else
864
1506
        {
865
 
            KWFrameSet *fs = frame->getFrameSet();
866
 
            if ( fs )
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() );
868
1509
            else
869
1510
                runGroup->setEnabled( true );
870
1511
        }
 
1512
        runSideGroup->setEnabled( runGroup->isEnabled() && rRunBounding->isChecked() );
 
1513
        eRGap->setEnabled( runGroup->isEnabled() &&
 
1514
            ( rRunBounding->isChecked() || rRunSkip->isChecked() ) );
871
1515
    }
872
1516
}
873
1517
 
874
1518
bool KWFrameDia::applyChanges()
875
1519
{
876
 
    //kdDebug() << "KWFrameDia::applyChanges"<<endl;
877
 
    ASSERT(frame);
878
 
    if ( !frame )
879
 
        return false;
880
 
    KWFrame *frameCopy=frame->getCopy();
881
 
    if ( tab1 )
882
 
    {
883
 
        // Copy
884
 
        frame->setCopy( cbCopy->isChecked() );
885
 
 
886
 
        // FrameBehaviour
887
 
        if ( frameType == FT_TEXT )
888
 
        {
889
 
            if(rResizeFrame->isChecked())
890
 
                frame->setFrameBehaviour(KWFrame::AutoExtendFrame);
891
 
            else if ( rAppendFrame->isChecked())
892
 
                frame->setFrameBehaviour(KWFrame::AutoCreateNewFrame);
893
 
            else
894
 
                frame->setFrameBehaviour(KWFrame::Ignore);
895
 
        }
896
 
 
897
 
        // NewFrameBehaviour
898
 
        if( reconnect && reconnect->isChecked() )
899
 
            frame->setNewFrameBehaviour(KWFrame::Reconnect);
900
 
        else if ( noFollowup->isChecked() )
901
 
            frame->setNewFrameBehaviour(KWFrame::NoFollowup);
902
 
        else
903
 
            frame->setNewFrameBehaviour(KWFrame::Copy);
904
 
 
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
907
1526
    }
908
 
    bool createFrameset=false;
909
 
    QString name;
910
 
    if ( tab3 )
911
 
    {
 
1527
    QString name=QString::null;
 
1528
 
 
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...
917
 
 
918
 
        QString str = lFrameSList->currentItem() ? lFrameSList->currentItem()->text( 0 ) : QString::null;
919
 
        createFrameset = ( str[ 0 ] == '*' );
920
 
        if ( createFrameset )
921
 
            str.remove( 0, 1 );
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)
924
1536
 
925
1537
        name = eFrameSetName->text();
926
1538
        if ( name.isEmpty() ) // Don't allow empty names
927
1539
            name = doc->generateFramesetName( i18n( "Text Frameset %1" ) );
928
 
 
929
 
        if ( fs || createFrameset ) // Last or first case -> check frameset name unicity
930
 
        {
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();
 
1542
        if(frameSetItem) {
 
1543
            QString str = frameSetItem->text( 0 );
 
1544
            fs = doc->frameSet(str.toInt() - 1);
 
1545
        }
 
1546
        if(rNewFrameset->isChecked()) { // create a new FS.
 
1547
            if(frame && frame->frameSet()) {
 
1548
                // disconnect.
 
1549
                if(! mayDeleteFrameSet( static_cast<KWTextFrameSet*>(frame->frameSet())))
 
1550
                    return false;
 
1551
                frame->frameSet()->delFrame( frame, false );
 
1552
            } else {
 
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())))
 
1556
                        return false;
 
1557
                }
 
1558
                for(KWFrame *f=allFrames.first();f; f=allFrames.next())
 
1559
                    f->frameSet()->delFrame( f, false );
 
1560
            }
 
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.
 
1563
                if(!macroCmd)
 
1564
                    macroCmd = new KMacroCommand( i18n("Rename Frameset") );
 
1565
                // Rename frameset
 
1566
                KWFrameSetPropertyCommand *cmd = new KWFrameSetPropertyCommand( i18n("Rename Frameset"), fs, KWFrameSetPropertyCommand::FSP_NAME, frameSetItem->text( 1 ));
 
1567
                macroCmd->addCommand(cmd);
 
1568
                cmd->execute();
 
1569
            }
 
1570
            if(frame && fs ) {
 
1571
                if(frame->frameSet() != fs)  {
 
1572
                    if(frame->frameSet()!=0) {
 
1573
                        // reconnect.
 
1574
                        if(! mayDeleteFrameSet( dynamic_cast<KWTextFrameSet*>(frame->frameSet())))
 
1575
                            return false;
 
1576
                        frame->frameSet()->delFrame( frame, false );
 
1577
                    }
 
1578
                    fs->addFrame(frame);
 
1579
                }
 
1580
            } else if ( fs ){
 
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())))
 
1585
                            return false;
 
1586
                    }
 
1587
                }
 
1588
                if ( fs )
937
1589
                {
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 );
 
1596
                                fs->addFrame(f);
 
1597
                            }
 
1598
                        }
 
1599
                    }
 
1600
                }
 
1601
            }
 
1602
        }
 
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));
944
1614
                    else
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);
949
1619
                    return false;
950
1620
                }
 
1621
            }
 
1622
        }
 
1623
    }
 
1624
    if ( tab1 ) { // TAB Frame Options
 
1625
        // Copy
 
1626
        if(frame)
 
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() );
 
1632
            }
951
1633
        }
952
1634
 
953
 
        // Third case (changing frame attachment)
954
 
        if ( fs &&
955
 
             ! (static_cast<unsigned int>( _num ) < doc->getNumFrameSets() &&
956
 
                fs == doc->getFrameSet(_num)))
 
1635
        // FrameBehavior
 
1636
        if ( frameType == FT_TEXT )
957
1637
        {
958
 
            // Check if last frame
959
 
            if ( fs->getNumFrames() == 1 )
960
 
            {
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;
966
 
                if ( !isEmpty )
967
 
                {
968
 
                    int result = KMessageBox::warningContinueCancel(this,
969
 
                                                                    i18n( "You are about to reconnect the last Frame of the\n"
970
 
                                                                          "Frameset '%1'.\n"
971
 
                                                                          "The contents of this Frameset will not appear\n"
972
 
                                                                          "anymore!\n\n"
973
 
                                                                          "Are you sure you want to do that?").arg(fs->getName()),
974
 
                                                                    i18n("Reconnect Frame"), i18n("&Reconnect"));
975
 
                    if (result != KMessageBox::Continue)
976
 
                        return false;
977
 
                }
978
 
            }
979
 
 
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 );
983
 
            // TODO undo/redo ?
984
 
        }
985
 
        // Do not use 'fs' past this, the above might have changed the frame's frameset
986
 
 
987
 
        if(frame->getFrameSet() == 0L) { // if there is no frameset (anymore)
988
 
            if( ! createFrameset )
989
 
            {
990
 
                kdDebug() << "KWFrameDia::applyChanges attaching to frameset " << _num << endl;
991
 
                // attach frame to frameset number _num
992
 
                KWFrameSet * newFs = doc->getFrameSet( _num );
993
 
                ASSERT( newFs );
994
 
                newFs->addFrame( frame );
995
 
                // TODO undo/redo ?
996
 
            }
997
 
        }
 
1638
            bool update=true;
 
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;
 
1646
            else
 
1647
                update=false;
 
1648
 
 
1649
            if(frame)
 
1650
                if(cbAllFrames->isChecked() && frame->frameSet())
 
1651
                    frame->frameSet()->setFrameBehavior(fb);
 
1652
                else
 
1653
                    frame->setFrameBehavior(fb);
 
1654
            else if(update) {
 
1655
                for(KWFrame *f=allFrames.first();f; f=allFrames.next())
 
1656
                    if(cbAllFrames->isChecked())
 
1657
                        f->frameSet()->setFrameBehavior(fb);
 
1658
                    else
 
1659
                        f->setFrameBehavior(fb);
 
1660
            }
 
1661
            if ( frame && frame->frameSet())
 
1662
            {
 
1663
                KWTextFrameSet * frm=static_cast<KWTextFrameSet *>( frame->frameSet() );
 
1664
                if(frm->textObject()->protectContent()!=cbProtectContent->isChecked())
 
1665
                {
 
1666
                    if(!macroCmd)
 
1667
                        macroCmd = new KMacroCommand( i18n("Protect Content") );
 
1668
                    KWProtectContentCommand * cmd = new KWProtectContentCommand( i18n("Protect Content"), frm,cbProtectContent->isChecked() );
 
1669
                    cmd->execute();
 
1670
                    macroCmd->addCommand(cmd);
 
1671
                }
 
1672
            }
 
1673
            else
 
1674
            {
 
1675
                if ( cbProtectContent->state() != QButton::NoChange)
 
1676
                {
 
1677
                    for(KWFrame *f=allFrames.first();f; f=allFrames.next())
 
1678
                    {
 
1679
                        KWTextFrameSet * frm=dynamic_cast<KWTextFrameSet *>( f->frameSet() );
 
1680
                        if ( frm )
 
1681
                        {
 
1682
                            if(frm->textObject()->protectContent()!=cbProtectContent->isChecked())
 
1683
                            {
 
1684
                                if(!macroCmd)
 
1685
                                    macroCmd = new KMacroCommand( i18n("Protect Content") );
 
1686
                                KWProtectContentCommand * cmd = new KWProtectContentCommand( i18n("Protect Content"), frm,cbProtectContent->isChecked() );
 
1687
                                cmd->execute();
 
1688
                                macroCmd->addCommand(cmd);
 
1689
                            }
 
1690
                        }
 
1691
 
 
1692
                    }
 
1693
                }
 
1694
            }
 
1695
 
 
1696
        }
 
1697
        // NewFrameBehavior
 
1698
        bool update=true;
 
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;
998
1706
        else
 
1707
            update=false;
 
1708
 
 
1709
        if(frame)
 
1710
            if(cbAllFrames->isChecked() && frame->frameSet())
 
1711
                frame->frameSet()->setNewFrameBehavior(nfb);
 
1712
            else
 
1713
                frame->setNewFrameBehavior(nfb);
 
1714
        else if(update)
 
1715
            for(KWFrame *f=allFrames.first();f; f=allFrames.next())
 
1716
                if(cbAllFrames->isChecked())
 
1717
                    f->frameSet()->setNewFrameBehavior(nfb);
 
1718
                else
 
1719
                    f->setNewFrameBehavior(nfb);
 
1720
 
 
1721
        // aspect ratio
 
1722
        if ( cbAspectRatio && (frameType==FT_PICTURE
 
1723
#if 0 // KWORD_HORIZONTAL_LINE
 
1724
            || frameType == FT_HORZLINE
 
1725
#endif
 
1726
            ))
999
1727
        {
1000
 
            // Rename frameset
1001
 
            frame->getFrameSet()->setName( name );
 
1728
            if(frame) {
 
1729
                KWPictureFrameSet * frm=static_cast<KWPictureFrameSet *>( frame->frameSet() );
 
1730
                if(frm->keepAspectRatio()!=cbAspectRatio->isChecked())
 
1731
                {
 
1732
                    if(!macroCmd)
 
1733
                        macroCmd = new KMacroCommand( i18n("Frame Properties") );
 
1734
                    KWFrameSetPropertyCommand *cmd = new KWFrameSetPropertyCommand( QString::null,frame->frameSet(), KWFrameSetPropertyCommand::FSP_KEEPASPECTRATION, cbAspectRatio->isChecked()? "keepRatio" : "dontKeepRatio" );
 
1735
                    cmd->execute();
 
1736
 
 
1737
                    macroCmd->addCommand(cmd);
 
1738
                }
 
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());
 
1742
                    if(fs) {
 
1743
                        if(fs->keepAspectRatio()!=cbAspectRatio->isChecked())
 
1744
                        {
 
1745
                            if(!macroCmd)
 
1746
                                macroCmd = new KMacroCommand( i18n("Frame Properties") );
 
1747
                            KWFrameSetPropertyCommand *cmd = new KWFrameSetPropertyCommand( QString::null,fs, KWFrameSetPropertyCommand::FSP_KEEPASPECTRATION, cbAspectRatio->isChecked()? "keepRatio" : "dontKeepRatio" );
 
1748
                            cmd->execute();
 
1749
 
 
1750
                            macroCmd->addCommand(cmd);
 
1751
                        }
 
1752
                    }
 
1753
                }
 
1754
            }
1002
1755
        }
1003
1756
    }
1004
 
 
1005
 
    if ( tab2 )
1006
 
    {
 
1757
    if ( tab2 ) { // TAB Text Runaround
1007
1758
        // Run around
 
1759
        KWFrame::RunAround ra=KWFrame::RA_BOUNDINGRECT;
 
1760
        bool update=true;
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 );
1014
 
 
1015
 
        frame->setRunAroundGap( KWUnit::fromUserValue( eRGap->text().toDouble(), doc->getUnit() ) );
1016
 
    }
1017
 
    KMacroCommand * macroCmd=0L;
1018
 
 
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()))
1024
 
    {
1025
 
        if(!macroCmd)
1026
 
            macroCmd = new KMacroCommand( i18n("Frame Properties") );
1027
 
        KWFramePropertiesCommand*cmd = new KWFramePropertiesCommand( i18n("Frame Properties"), frameCopy, frame );
1028
 
        macroCmd->addCommand(cmd);
1029
 
    }
1030
 
    else
1031
 
    {
1032
 
        delete frameCopy;
1033
 
        if(frame->getFrameSet() == 0L && createFrameset )
 
1764
            ra = KWFrame::RA_BOUNDINGRECT;
 
1765
        else if ( rRunSkip->isChecked() )
 
1766
            ra = KWFrame::RA_SKIP;
 
1767
        else
 
1768
            update=false;
 
1769
        if(frame)
 
1770
            frame->setRunAround(ra);
 
1771
        else if (update) {
 
1772
            for(KWFrame *f=allFrames.first();f; f=allFrames.next())
 
1773
                f->setRunAround(ra);
 
1774
        }
 
1775
 
 
1776
        // Run around side.
 
1777
        KWFrame::RunAroundSide rs=KWFrame::RA_BIGGEST;
 
1778
        update=true;
 
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;
 
1785
        else
 
1786
            update=false;
 
1787
        if(frame)
 
1788
            frame->setRunAroundSide(rs);
 
1789
        else if (update) {
 
1790
            for(KWFrame *f=allFrames.first();f; f=allFrames.next())
 
1791
                f->setRunAroundSide(rs);
 
1792
        }
 
1793
 
 
1794
        // Run around gap.
 
1795
        double newValue = QMAX( 0, KoUnit::ptFromUnit( eRGap->value(), doc->getUnit() ));
 
1796
        if(frame)
 
1797
            frame->setRunAroundGap(newValue);
 
1798
        else
 
1799
            for(KWFrame *f=allFrames.first();f; f=allFrames.next())
 
1800
                f->setRunAroundGap(newValue);
 
1801
    }
 
1802
    if(tab5) { // Tab Background fill/color
 
1803
        QBrush tmpBrush=frameBrushStyle();
 
1804
        if(frame) {
 
1805
            if(tmpBrush!=frame->backgroundColor()) {
 
1806
                frame->setBackgroundColor(tmpBrush);
 
1807
                doc->repaintAllViews();
 
1808
            }
 
1809
        } else if(overwriteColor->isChecked()) {
 
1810
            for(KWFrame *f=allFrames.first();f; f=allFrames.next())
 
1811
                f->setBackgroundColor(tmpBrush);
 
1812
            doc->repaintAllViews();
 
1813
        }
 
1814
    }
 
1815
 
 
1816
 
 
1817
    double px=0.0;
 
1818
    double py=0.0;
 
1819
    double pw=0.0;
 
1820
    double ph=0.0;
 
1821
    double uLeft = 0.0;
 
1822
    double uTop = 0.0;
 
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 )
1034
1832
        {
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() ));
 
1837
        }
 
1838
    }
 
1839
    KoRect rect( px, py, pw, ph );
 
1840
 
 
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..
 
1846
 
 
1847
        if(frame->frameSet() == 0L ) { // if there is no frameset (anymore)
1036
1848
            KWTextFrameSet *_frameSet = new KWTextFrameSet( doc, name );
1037
1849
            _frameSet->addFrame( frame );
 
1850
 
 
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 );
 
1857
            } else {
 
1858
                KMessageBox::sorry( this,i18n("The frame will not be resized because the new size would be greater than the size of the page."));
 
1859
            }
 
1860
 
1038
1861
            doc->addFrameSet( _frameSet );
1039
 
            KWCreateFrameCommand *cmd=new KWCreateFrameCommand( i18n("Create text frame"), frame) ;
1040
 
            doc->addCommand(cmd);
1041
 
        }
1042
 
    }
1043
 
 
1044
 
    if ( tab4 )
1045
 
    {
1046
 
        // The floating attribute applies to the whole frameset...
1047
 
        KWFrameSet * fs = frame->getFrameSet();
1048
 
        KWFrameSet * parentFs = fs->getGroupManager() ? fs->getGroupManager() : fs;
1049
 
 
1050
 
        // Floating
1051
 
        if ( floating->isChecked() && !parentFs->isFloating() )
1052
 
        {
1053
 
            if(!macroCmd)
1054
 
                macroCmd = new KMacroCommand( i18n("Make FrameSet Inline") );
1055
 
 
1056
 
            QList<FrameIndex> frameindexList;
1057
 
            QList<FrameResizeStruct> frameindexMove;
1058
 
 
1059
 
            FrameIndex *index=new FrameIndex( frame );
1060
 
            FrameResizeStruct *move=new FrameResizeStruct;
1061
 
 
1062
 
            move->sizeOfBegin=frame->normalize();
1063
 
 
1064
 
            // turn non-floating frame into floating frame
1065
 
            KWFrameSetFloatingCommand *cmd = new KWFrameSetFloatingCommand( i18n("Make FrameSet Inline"), parentFs, true );
1066
 
            cmd->execute();
1067
 
 
1068
 
            move->sizeOfEnd=frame->normalize();
1069
 
 
1070
 
            frameindexList.append(index);
1071
 
            frameindexMove.append(move);
1072
 
 
1073
 
            KWFrameMoveCommand *cmdMoveFrame = new KWFrameMoveCommand( i18n("Move Frame"), frameindexList, frameindexMove );
1074
 
 
1075
 
            macroCmd->addCommand(cmdMoveFrame);
1076
 
            macroCmd->addCommand(cmd);
1077
 
        }
1078
 
        else if ( !floating->isChecked() && parentFs->isFloating() )
1079
 
        {
1080
 
            if(!macroCmd)
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);
1085
 
            cmd->execute();
1086
 
        }
1087
 
 
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;
1095
 
 
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() );
1100
 
 
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
1108
 
 
1109
 
                // TODO apply page limits?
1110
 
                tmpResize.sizeOfEnd = frame->normalize();
1111
 
                if(!macroCmd)
1112
 
                    macroCmd = new KMacroCommand( i18n("Resize Frame") );
1113
 
 
1114
 
                KWFrameResizeCommand *cmd = new KWFrameResizeCommand( i18n("Resize Frame"), index, tmpResize ) ;
1115
 
                macroCmd->addCommand(cmd);
1116
 
                doc->frameChanged( frame );
1117
 
            }
1118
 
        }
1119
 
 
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 );
1126
 
    }
1127
 
 
 
1862
            if(!macroCmd)
 
1863
                macroCmd = new KMacroCommand( i18n("Create Text Frame") );
 
1864
            KWCreateFrameCommand *cmd=new KWCreateFrameCommand( i18n("Create Text Frame"), frame) ;
 
1865
            macroCmd->addCommand(cmd);
 
1866
        }
 
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())))
 
1874
        {
 
1875
            if(!macroCmd)
 
1876
                macroCmd = new KMacroCommand( i18n("Frame Properties") );
 
1877
 
 
1878
            KWFramePropertiesCommand*cmd = new KWFramePropertiesCommand( QString::null, frameCopy, frame );
 
1879
            macroCmd->addCommand(cmd);
 
1880
            frameCopy = 0L;
 
1881
        } else
 
1882
            delete frameCopy;
 
1883
    }
 
1884
    if ( tab4 ) { // TAB Geometry
 
1885
 
 
1886
        KWFrame *f=allFrames.first();
 
1887
        if(f==0L) f=frame;
 
1888
        while(f) {
 
1889
            // The floating attribute applies to the whole frameset...
 
1890
            KWFrameSet * fs = f->frameSet();
 
1891
            KWFrameSet * parentFs = fs->getGroupManager() ? fs->getGroupManager() : fs;
 
1892
 
 
1893
            // Floating
 
1894
            if ( floating->isChecked() && !parentFs->isFloating() )
 
1895
            {
 
1896
                if(!macroCmd)
 
1897
                    macroCmd = new KMacroCommand( i18n("Make Frameset Inline") );
 
1898
 
 
1899
                QValueList<FrameIndex> frameindexList;
 
1900
                QValueList<FrameMoveStruct> frameindexMove;
 
1901
 
 
1902
                KoPoint oldPos = f->topLeft();
 
1903
 
 
1904
                // turn non-floating frame into floating frame
 
1905
                KWFrameSetPropertyCommand *cmd = new KWFrameSetPropertyCommand( QString::null, parentFs, KWFrameSetPropertyCommand::FSP_FLOATING, "true" );
 
1906
                cmd->execute();
 
1907
 
 
1908
                frameindexList.append( FrameIndex( f ) );
 
1909
                frameindexMove.append( FrameMoveStruct( oldPos, f->topLeft() ) );
 
1910
 
 
1911
                KWFrameMoveCommand *cmdMoveFrame = new KWFrameMoveCommand( QString::null, frameindexList, frameindexMove );
 
1912
 
 
1913
                macroCmd->addCommand(cmdMoveFrame);
 
1914
                macroCmd->addCommand(cmd);
 
1915
            }
 
1916
            else if ( !floating->isChecked() && parentFs->isFloating() )
 
1917
            {
 
1918
                if(!macroCmd)
 
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);
 
1923
                cmd->execute();
 
1924
            }
 
1925
            if ( parentFs->isProtectSize() != protectSize->isChecked() )
 
1926
            {
 
1927
                if(!macroCmd)
 
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);
 
1931
                cmd->execute();
 
1932
 
 
1933
            }
 
1934
            if ( frame ) {
 
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;
 
1940
 
 
1941
                    if( !doc->isOutOfPage( rect , f->pageNum() ) )
 
1942
                    {
 
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() );
 
1948
                        if(!macroCmd)
 
1949
                            macroCmd = new KMacroCommand( i18n("Resize Frame") );
 
1950
 
 
1951
                        KWFrameResizeCommand *cmd = new KWFrameResizeCommand( i18n("Resize Frame"), index, tmpResize ) ;
 
1952
                        macroCmd->addCommand(cmd);
 
1953
                        doc->frameChanged( f );
 
1954
                    }
 
1955
                    else
 
1956
                    {
 
1957
                        KMessageBox::sorry( this,i18n("The frame will not be resized because the new size would be greater than the size of the page."));
 
1958
                    }
 
1959
                }
 
1960
                if (m_inputLeftMargin && (!tab1 || (tab1 && cbProtectContent && !cbProtectContent->isChecked())))
 
1961
                {
 
1962
                    if ( oldMarginLeft!=m_inputLeftMargin->value() || oldMarginRight!=m_inputRightMargin->value() ||
 
1963
                         oldMarginTop!=m_inputTopMargin->value() || oldMarginBottom!=m_inputBottomMargin->value())
 
1964
                    {
 
1965
                        FrameIndex index( f );
 
1966
                        FrameMarginsStruct tmpMargBegin(f);
 
1967
                        FrameMarginsStruct tmpMargEnd(uLeft, uTop, uRight, uBottom);
 
1968
                        if(!macroCmd)
 
1969
                            macroCmd = new KMacroCommand( i18n("Change Margin Frame") );
 
1970
                        KWFrameChangeFrameMarginCommand *cmd = new KWFrameChangeFrameMarginCommand( i18n("Change Margin Frame"), index, tmpMargBegin, tmpMargEnd) ;
 
1971
                        cmd->execute();
 
1972
                        macroCmd->addCommand(cmd);
 
1973
                    }
 
1974
                }
 
1975
            }
 
1976
            f=allFrames.next();
 
1977
        }
 
1978
    }
1128
1979
    if(macroCmd)
1129
1980
        doc->addCommand(macroCmd);
1130
1981
 
1134
1985
 
1135
1986
void KWFrameDia::updateFrames()
1136
1987
{
1137
 
    QList<KWFrame> frames=doc->getSelectedFrames();
 
1988
    QPtrList<KWFrame> frames=doc->getSelectedFrames();
1138
1989
 
1139
1990
    doc->updateAllFrames();
1140
1991
    doc->layout();
1141
1992
 
1142
 
    if(frames.count()==1)
1143
 
    {
1144
 
        KWFrame *theFrame = frames.first();
1145
 
        if(theFrame->isSelected())
1146
 
            theFrame->updateResizeHandles();
1147
 
    }
 
1993
    for(KWFrame *f=frames.first();f;f=frames.next())
 
1994
        f->updateResizeHandles();
 
1995
 
1148
1996
    doc->repaintAllViews();
1149
1997
}
1150
1998
 
1158
2006
 
1159
2007
void KWFrameDia::connectListSelected( QListViewItem *item )
1160
2008
{
 
2009
/* belongs to TAB3, is activated when the user selects another frameset from the list */
1161
2010
    if ( !item )
1162
 
        return;
1163
 
 
1164
 
    QString str = item->text( 0 );
1165
 
    bool createFrameset = ( str[ 0 ] == '*' );
1166
 
    if ( createFrameset )
1167
 
    {
1168
 
        // Allow naming new frameset
1169
 
        eFrameSetName->setEnabled( TRUE );
1170
 
    }
1171
 
    else if ( frame && frame->getFrameSet() )
1172
 
    {
1173
 
        int _num = str.toInt() - 1;
1174
 
        // Allow renaming an existing frameset
1175
 
        // ( Disabled when changing the frameset connection )
1176
 
        eFrameSetName->setEnabled( doc->getFrameSet( _num ) == frame->getFrameSet() );
1177
 
    }
1178
 
    else
1179
 
        eFrameSetName->setEnabled( FALSE );
1180
 
}
1181
 
 
 
2011
        item = lFrameSList->selectedItem();
 
2012
 
 
2013
    if ( !item ) return; // assertion
 
2014
 
 
2015
    rExistingFrameset->setChecked(true);
 
2016
    eFrameSetName->setText( item->text(1) );
 
2017
}
 
2018
 
 
2019
bool KWFrameDia::mayDeleteFrameSet(KWTextFrameSet *fs) {
 
2020
    if(fs==0) return true;
 
2021
    if(fs->getNumFrames() > 1) return true;
 
2022
    KoTextParag * parag = fs->textDocument()->firstParag();
 
2023
    if(parag==0) return true;
 
2024
    bool isEmpty = parag->next() == 0L && parag->length() == 1;
 
2025
    if ( !isEmpty ) {
 
2026
        int result = KMessageBox::warningContinueCancel(this,
 
2027
           i18n( "You are about to reconnect the last frame of the "
 
2028
           "frameset '%1'. "
 
2029
           "The contents of this frameset will be deleted.\n"
 
2030
           "Are you sure you want to do that?").arg(fs->getName()),
 
2031
           i18n("Reconnect Frame"), i18n("&Reconnect"));
 
2032
        if (result != KMessageBox::Continue)
 
2033
            return false;
 
2034
    }
 
2035
    return true;
 
2036
}