00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <koPageLayoutDia.h>
00025
00026 #include <qcombobox.h>
00027 #include <qlabel.h>
00028 #include <qlayout.h>
00029 #include <qpainter.h>
00030 #include <qlineedit.h>
00031 #include <qbuttongroup.h>
00032 #include <qradiobutton.h>
00033 #include <knumvalidator.h>
00034 #include <qspinbox.h>
00035
00036 #include <klocale.h>
00037 #include <koUnit.h>
00038 #include <knuminput.h>
00039 #include <qcheckbox.h>
00040
00041 #include <kiconloader.h>
00042 #include <kmessagebox.h>
00043
00044
00045
00046
00047
00048
00049 KoPagePreview::KoPagePreview( QWidget* parent, const char *name, const KoPageLayout& _layout )
00050 : QGroupBox( i18n( "Page Preview" ), parent, name )
00051 {
00052 setPageLayout( _layout );
00053 columns = 1;
00054 setMinimumSize( 150, 150 );
00055 }
00056
00057
00058 KoPagePreview::~KoPagePreview()
00059 {
00060 }
00061
00062
00063 void KoPagePreview::setPageLayout( const KoPageLayout &_layout )
00064 {
00065 pgWidth = POINT_TO_MM(_layout.ptWidth) * 0.5;
00066 pgHeight = POINT_TO_MM(_layout.ptHeight) * 0.5;
00067
00068 pgX = POINT_TO_MM(_layout.ptLeft) * 0.5;
00069 pgY = POINT_TO_MM(_layout.ptTop) * 0.5;
00070 pgW = pgWidth - ( POINT_TO_MM(_layout.ptLeft) + POINT_TO_MM(_layout.ptRight) ) * 0.5;
00071 pgH = pgHeight - ( POINT_TO_MM(_layout.ptTop) + POINT_TO_MM(_layout.ptBottom) ) * 0.5;
00072
00073 repaint( true );
00074 }
00075
00076
00077 void KoPagePreview::setPageColumns( const KoColumns &_columns )
00078 {
00079 columns = _columns.columns;
00080 repaint( true );
00081 }
00082
00083
00084 void KoPagePreview::drawContents( QPainter *painter )
00085 {
00086 double cw = pgW;
00087 if(columns!=1)
00088 cw/=static_cast<double>(columns);
00089
00090 painter->setBrush( white );
00091 painter->setPen( QPen( black ) );
00092
00093 int x=static_cast<int>( ( width() - pgWidth ) * 0.5 );
00094 int y=static_cast<int>( ( height() - pgHeight ) * 0.5 );
00095 int w=static_cast<int>(pgWidth);
00096 int h=static_cast<int>(pgHeight);
00097
00098 painter->drawRect( x, y, w, h );
00099
00100 painter->setBrush( QBrush( black, HorPattern ) );
00101 if ( pgW == pgWidth || pgH == pgHeight )
00102 painter->setPen( NoPen );
00103 else
00104 painter->setPen( lightGray );
00105
00106 for ( int i = 0; i < columns; ++i )
00107 painter->drawRect( x + static_cast<int>(pgX) + static_cast<int>(i * cw),
00108 y + static_cast<int>(pgY), static_cast<int>(cw),
00109 static_cast<int>(pgH) );
00110 }
00111
00112
00113
00114
00115
00116
00117 KoPageLayoutDia::KoPageLayoutDia( QWidget* parent, const char* name,
00118 const KoPageLayout& _layout,
00119 const KoHeadFoot& _hf, int tabs,
00120 KoUnit::Unit unit, bool modal )
00121 : KDialogBase( KDialogBase::Tabbed, i18n("Page Layout"), KDialogBase::Ok | KDialogBase::Cancel,
00122 KDialogBase::Ok, parent, name, modal)
00123 {
00124
00125 flags = tabs;
00126 pgPreview = 0;
00127 pgPreview2 = 0;
00128
00129 layout = _layout;
00130 hf = _hf;
00131 m_unit = unit;
00132
00133 cl.columns = 1;
00134
00135 enableBorders = true;
00136
00137 if ( tabs & FORMAT_AND_BORDERS ) setupTab1();
00138 if ( tabs & HEADER_AND_FOOTER ) setupTab2();
00139
00140 retPressed = false;
00141
00142 setFocusPolicy( QWidget::StrongFocus );
00143 setFocus();
00144 }
00145
00146
00147 KoPageLayoutDia::KoPageLayoutDia( QWidget* parent, const char* name,
00148 const KoPageLayout& _layout,
00149 const KoHeadFoot& _hf,
00150 const KoColumns& _cl,
00151 const KoKWHeaderFooter& _kwhf,
00152 int tabs, KoUnit::Unit unit )
00153 : KDialogBase( KDialogBase::Tabbed, i18n("Page Layout"), KDialogBase::Ok | KDialogBase::Cancel,
00154 KDialogBase::Ok, parent, name, true)
00155 {
00156 flags = tabs;
00157 pgPreview = 0;
00158 pgPreview2 = 0;
00159
00160 layout = _layout;
00161 hf = _hf;
00162 cl = _cl;
00163 kwhf = _kwhf;
00164 m_unit = unit;
00165
00166 enableBorders = true;
00167
00168 if ( tabs & DISABLE_BORDERS ) enableBorders = false;
00169 if ( tabs & FORMAT_AND_BORDERS ) setupTab1();
00170 if ( tabs & HEADER_AND_FOOTER ) setupTab2();
00171 if ( tabs & COLUMNS ) setupTab3();
00172 if ( tabs & KW_HEADER_AND_FOOTER ) setupTab4();
00173
00174 retPressed = false;
00175
00176 setFocusPolicy( QWidget::StrongFocus );
00177 setFocus();
00178 }
00179
00180
00181 KoPageLayoutDia::~KoPageLayoutDia()
00182 {
00183 }
00184
00185
00186 bool KoPageLayoutDia::pageLayout( KoPageLayout& _layout, KoHeadFoot& _hf, int _tabs, KoUnit::Unit& unit )
00187 {
00188 bool res = false;
00189 KoPageLayoutDia *dlg = new KoPageLayoutDia( 0, "PageLayout", _layout, _hf, _tabs, unit );
00190
00191 if ( dlg->exec() == QDialog::Accepted ) {
00192 res = true;
00193 if ( _tabs & FORMAT_AND_BORDERS ) _layout = dlg->getLayout();
00194 if ( _tabs & HEADER_AND_FOOTER ) _hf = dlg->getHeadFoot();
00195 unit = dlg->unit();
00196 }
00197
00198 delete dlg;
00199
00200 return res;
00201 }
00202
00203
00204 bool KoPageLayoutDia::pageLayout( KoPageLayout& _layout, KoHeadFoot& _hf, KoColumns& _cl,
00205 KoKWHeaderFooter &_kwhf, int _tabs, KoUnit::Unit& unit )
00206 {
00207 bool res = false;
00208 KoPageLayoutDia *dlg = new KoPageLayoutDia( 0, "PageLayout", _layout, _hf, _cl, _kwhf, _tabs, unit );
00209
00210 if ( dlg->exec() == QDialog::Accepted ) {
00211 res = true;
00212 if ( _tabs & FORMAT_AND_BORDERS ) _layout = dlg->getLayout();
00213 if ( _tabs & HEADER_AND_FOOTER ) _hf = dlg->getHeadFoot();
00214 if ( _tabs & COLUMNS ) _cl = dlg->getColumns();
00215 if ( _tabs & KW_HEADER_AND_FOOTER ) _kwhf = dlg->getKWHeaderFooter();
00216 unit = dlg->unit();
00217 }
00218
00219 delete dlg;
00220
00221 return res;
00222 }
00223
00224
00225 KoPageLayout KoPageLayoutDia::standardLayout()
00226 {
00227 KoPageLayout _layout;
00228 _layout.format = PG_DIN_A4;
00229 _layout.orientation = PG_PORTRAIT;
00230 _layout.ptWidth = MM_TO_POINT( PG_A4_WIDTH );
00231 _layout.ptHeight = MM_TO_POINT( PG_A4_HEIGHT );
00232 _layout.ptLeft = MM_TO_POINT( 20.0 );
00233 _layout.ptRight = MM_TO_POINT( 20.0 );
00234 _layout.ptTop = MM_TO_POINT( 20.0 );
00235 _layout.ptBottom = MM_TO_POINT( 20.0 );
00236
00237 return _layout;
00238 }
00239
00240
00241 KoHeadFoot KoPageLayoutDia::getHeadFoot()
00242 {
00243 hf.headLeft = eHeadLeft->text();
00244 hf.headMid = eHeadMid->text();
00245 hf.headRight = eHeadRight->text();
00246 hf.footLeft = eFootLeft->text();
00247 hf.footMid = eFootMid->text();
00248 hf.footRight = eFootRight->text();
00249
00250 return hf;
00251 }
00252
00253
00254 KoColumns KoPageLayoutDia::getColumns()
00255 {
00256 cl.columns = nColumns->value();
00257 cl.ptColumnSpacing = KoUnit::ptFromUnit( nCSpacing->value(), m_unit );
00258 return cl;
00259 }
00260
00261
00262 KoKWHeaderFooter KoPageLayoutDia::getKWHeaderFooter()
00263 {
00264 if ( rhFirst->isChecked() && rhEvenOdd->isChecked() )
00265 kwhf.header = HF_FIRST_EO_DIFF;
00266 else if ( rhFirst->isChecked() )
00267 kwhf.header = HF_FIRST_DIFF;
00268 else if ( rhEvenOdd->isChecked() )
00269 kwhf.header = HF_EO_DIFF;
00270 else
00271 kwhf.header = HF_SAME;
00272
00273 kwhf.ptHeaderBodySpacing = KoUnit::ptFromUnit( nHSpacing->value(), m_unit );
00274 kwhf.ptFooterBodySpacing = KoUnit::ptFromUnit( nFSpacing->value(), m_unit );
00275 kwhf.ptFootNoteBodySpacing = KoUnit::ptFromUnit( nFNSpacing->value(), m_unit);
00276 if ( rfFirst->isChecked() && rfEvenOdd->isChecked() )
00277 kwhf.footer = HF_FIRST_EO_DIFF;
00278 else if ( rfFirst->isChecked() )
00279 kwhf.footer = HF_FIRST_DIFF;
00280 else if ( rfEvenOdd->isChecked() )
00281 kwhf.footer = HF_EO_DIFF;
00282 else
00283 kwhf.footer = HF_SAME;
00284
00285 return kwhf;
00286 }
00287
00288
00289 void KoPageLayoutDia::setupTab1()
00290 {
00291 QWidget *tab1 = addPage(i18n( "Page Size && &Margins" ));
00292
00293 QGridLayout *grid1 = new QGridLayout( tab1, 5, 2, KDialog::marginHint(), KDialog::spacingHint() );
00294
00295 QLabel *lpgUnit;
00296 if ( !( flags & DISABLE_UNIT ) ) {
00297
00298 QWidget* unitFrame = new QWidget( tab1 );
00299 grid1->addWidget( unitFrame, 0, 0, Qt::AlignLeft );
00300 QBoxLayout* unitLayout = new QHBoxLayout( unitFrame, KDialog::marginHint(), KDialog::spacingHint() );
00301
00302
00303 lpgUnit = new QLabel( i18n( "Unit:" ), unitFrame );
00304 unitLayout->addWidget( lpgUnit, 0, Qt::AlignRight | Qt::AlignVCenter );
00305
00306
00307 cpgUnit = new QComboBox( false, unitFrame, "cpgUnit" );
00308 cpgUnit->insertStringList( KoUnit::listOfUnitName() );
00309 unitLayout->addWidget( cpgUnit, 0, Qt::AlignLeft | Qt::AlignVCenter );
00310 connect( cpgUnit, SIGNAL( activated( int ) ), this, SLOT( unitChanged( int ) ) );
00311 } else {
00312 QString str=KoUnit::unitDescription(m_unit);
00313
00314 lpgUnit = new QLabel( i18n("All values are given in %1.").arg(str), tab1 );
00315 grid1->addWidget( lpgUnit, 0, 0, Qt::AlignLeft );
00316 }
00317
00318
00319 QGroupBox *formatFrame = new QGroupBox( i18n( "Page Size" ), tab1 );
00320 grid1->addWidget( formatFrame, 1, 0 );
00321 QGridLayout *formatGrid = new QGridLayout( formatFrame, 3, 2,
00322 2*KDialog::marginHint(), KDialog::spacingHint() );
00323 formatGrid->setColStretch( 1, 1 );
00324
00325
00326 QLabel *lpgFormat = new QLabel( i18n( "&Size:" ), formatFrame );
00327 formatGrid->addWidget( lpgFormat, 0, 0, Qt::AlignRight | Qt::AlignVCenter );
00328
00329
00330 cpgFormat = new QComboBox( false, formatFrame, "cpgFormat" );
00331 cpgFormat->insertStringList( KoPageFormat::allFormats() );
00332 lpgFormat->setBuddy( cpgFormat );
00333 formatGrid->addWidget( cpgFormat, 0, 1, Qt::AlignLeft | Qt::AlignVCenter );
00334 connect( cpgFormat, SIGNAL( activated( int ) ), this, SLOT( formatChanged( int ) ) );
00335
00336
00337 QLabel *lpgWidth = new QLabel( i18n( "&Width:" ), formatFrame );
00338 formatGrid->addWidget( lpgWidth, 1, 0, Qt::AlignRight | Qt::AlignVCenter );
00339
00340
00341 epgWidth = new KDoubleNumInput( formatFrame, "Width" );
00342 lpgWidth->setBuddy( epgWidth );
00343 formatGrid->addWidget( epgWidth, 1, 1, Qt::AlignLeft | Qt::AlignVCenter );
00344 if ( layout.format != PG_CUSTOM )
00345 epgWidth->setEnabled( false );
00346 connect( epgWidth, SIGNAL( valueChanged(double) ), this, SLOT( widthChanged() ) );
00347
00348
00349 QLabel *lpgHeight = new QLabel( i18n( "&Height:" ), formatFrame );
00350 formatGrid->addWidget( lpgHeight, 2, 0, Qt::AlignRight | Qt::AlignVCenter );
00351
00352
00353 epgHeight = new KDoubleNumInput( formatFrame, "Height" );
00354 lpgHeight->setBuddy( epgHeight );
00355 formatGrid->addWidget( epgHeight, 2, 1, Qt::AlignLeft | Qt::AlignVCenter );
00356 if ( layout.format != PG_CUSTOM )
00357 epgHeight->setEnabled( false );
00358 connect( epgHeight, SIGNAL( valueChanged(double ) ), this, SLOT( heightChanged() ) );
00359
00360
00361 QButtonGroup *orientFrame = new QButtonGroup( i18n( "Orientation" ), tab1 );
00362 grid1->addWidget( orientFrame, 2, 0 );
00363 QLayout *orientLayout = new QGridLayout( orientFrame, 2, 2,
00364 2*KDialog::marginHint(), KDialog::spacingHint() );
00365 orientLayout->setAutoAdd( true );
00366
00367 QLabel* lbPortrait = new QLabel( orientFrame );
00368 lbPortrait->setPixmap( QPixmap( UserIcon( "koPortrait" ) ) );
00369 lbPortrait->setMaximumWidth( lbPortrait->pixmap()->width() );
00370 rbPortrait = new QRadioButton( i18n("&Portrait"), orientFrame );
00371
00372 QLabel* lbLandscape = new QLabel( orientFrame );
00373 lbLandscape->setPixmap( QPixmap( UserIcon( "koLandscape" ) ) );
00374 lbLandscape->setMaximumWidth( lbLandscape->pixmap()->width() );
00375 rbLandscape = new QRadioButton( i18n("La&ndscape"), orientFrame );
00376
00377
00378 connect( rbPortrait, SIGNAL( clicked() ), this, SLOT( orientationChanged() ) );
00379 connect( rbLandscape, SIGNAL( clicked() ), this, SLOT( orientationChanged() ) );
00380
00381
00382 QButtonGroup *marginsFrame = new QButtonGroup( i18n( "Margins" ), tab1 );
00383 grid1->addWidget( marginsFrame, 3, 0 );
00384 QGridLayout *marginsLayout = new QGridLayout( marginsFrame, 4, 2,
00385 2*KDialog::marginHint(), KDialog::spacingHint() );
00386 marginsLayout->setColStretch( 1, 1 );
00387
00388
00389 QLabel* lbLeft = new QLabel( i18n( "&Left:" ), marginsFrame );
00390 marginsLayout->addWidget( lbLeft,
00391 0, 0, Qt::AlignRight | Qt::AlignVCenter );
00392 ebrLeft = new KDoubleNumInput( marginsFrame, "Left" );
00393 lbLeft->setBuddy( ebrLeft );
00394 marginsLayout->addWidget( ebrLeft, 0, 1 );
00395 connect( ebrLeft, SIGNAL( valueChanged( double ) ), this, SLOT( leftChanged() ) );
00396 if ( !enableBorders ) ebrLeft->setEnabled( false );
00397
00398
00399 QLabel* lbRight = new QLabel( i18n( "&Right:" ), marginsFrame );
00400 marginsLayout->addWidget( lbRight,
00401 1, 0, Qt::AlignRight | Qt::AlignVCenter );
00402 ebrRight = new KDoubleNumInput( marginsFrame, "Right" );
00403 lbRight->setBuddy( ebrRight );
00404 marginsLayout->addWidget( ebrRight, 1, 1 );
00405 connect( ebrRight, SIGNAL( valueChanged( double ) ), this, SLOT( rightChanged() ) );
00406 if ( !enableBorders ) ebrRight->setEnabled( false );
00407
00408
00409 QLabel* lbTop = new QLabel( i18n( "&Top:" ), marginsFrame );
00410 marginsLayout->addWidget( lbTop,
00411 2, 0, Qt::AlignRight | Qt::AlignVCenter );
00412 ebrTop = new KDoubleNumInput( marginsFrame, "Top" );
00413 lbTop->setBuddy( ebrTop );
00414 marginsLayout->addWidget( ebrTop, 2, 1 );
00415 connect( ebrTop, SIGNAL( valueChanged( double ) ), this, SLOT( topChanged() ) );
00416 if ( !enableBorders ) ebrTop->setEnabled( false );
00417
00418
00419 QLabel* lbBottom = new QLabel ( i18n( "&Bottom:" ), marginsFrame );
00420 marginsLayout->addWidget( lbBottom,
00421 3, 0, Qt::AlignRight | Qt::AlignVCenter );
00422 ebrBottom = new KDoubleNumInput( marginsFrame, "Bottom" );
00423 lbBottom->setBuddy( ebrBottom );
00424 marginsLayout->addWidget( ebrBottom, 3, 1 );
00425 connect( ebrBottom, SIGNAL( valueChanged( double ) ), this, SLOT( bottomChanged() ) );
00426 if ( !enableBorders ) ebrBottom->setEnabled( false );
00427
00428
00429 pgPreview = new KoPagePreview( tab1, "Preview", layout );
00430 grid1->addMultiCellWidget( pgPreview, 1, 3, 1, 1 );
00431
00432
00433 QWidget* spacer1 = new QWidget( tab1 );
00434 QWidget* spacer2 = new QWidget( tab1 );
00435 spacer1->setSizePolicy( QSizePolicy( QSizePolicy::Expanding,
00436 QSizePolicy::Expanding ) );
00437 spacer2->setSizePolicy( QSizePolicy( QSizePolicy::Expanding,
00438 QSizePolicy::Expanding ) );
00439 grid1->addWidget( spacer1, 4, 0 );
00440 grid1->addWidget( spacer2, 4, 1 );
00441
00442 setValuesTab1();
00443 updatePreview( layout );
00444 }
00445
00446
00447 void KoPageLayoutDia::setValuesTab1()
00448 {
00449
00450 if ( !( flags & DISABLE_UNIT ) )
00451 cpgUnit->setCurrentItem( m_unit );
00452
00453
00454 cpgFormat->setCurrentItem( layout.format );
00455
00456
00457 if( layout.orientation == PG_PORTRAIT )
00458 rbPortrait->setChecked( true );
00459 else
00460 rbLandscape->setChecked( true );
00461
00462 setValuesTab1Helper();
00463
00464 pgPreview->setPageLayout( layout );
00465 }
00466
00467 void KoPageLayoutDia::setValuesTab1Helper()
00468 {
00469 epgWidth->setValue( KoUnit::ptToUnit( layout.ptWidth, m_unit ) );
00470 epgWidth->setSuffix( KoUnit::unitName( m_unit ) );
00471
00472 epgHeight->setValue( KoUnit::ptToUnit( layout.ptHeight, m_unit ) );
00473 epgHeight->setSuffix( KoUnit::unitName( m_unit ) );
00474
00475 ebrLeft->setValue( KoUnit::ptToUnit( layout.ptLeft, m_unit ) );
00476 ebrLeft->setSuffix( KoUnit::unitName( m_unit ) );
00477 ebrLeft->setRange( 0, KoUnit::ptToUnit( layout.ptWidth, m_unit) );
00478
00479 ebrRight->setValue( KoUnit::ptToUnit( layout.ptRight, m_unit ) );
00480 ebrRight->setSuffix( KoUnit::unitName( m_unit ) );
00481 ebrRight->setRange( 0, KoUnit::ptToUnit( layout.ptWidth, m_unit) );
00482
00483 ebrTop->setValue( KoUnit::ptToUnit( layout.ptTop, m_unit ) );
00484 ebrTop->setSuffix( KoUnit::unitName( m_unit ) );
00485 ebrTop->setRange( 0, KoUnit::ptToUnit( layout.ptHeight, m_unit) );
00486
00487 ebrBottom->setValue( KoUnit::ptToUnit( layout.ptBottom, m_unit ) );
00488 ebrBottom->setSuffix( KoUnit::unitName( m_unit ) );
00489 ebrBottom->setRange( 0, KoUnit::ptToUnit( layout.ptHeight, m_unit) );
00490 }
00491
00492
00493 void KoPageLayoutDia::setupTab2()
00494 {
00495 QWidget *tab2 = addPage(i18n( "H&eader && Footer" ));
00496 QGridLayout *grid2 = new QGridLayout( tab2, 7, 2, KDialog::marginHint(), KDialog::spacingHint() );
00497
00498
00499 QGroupBox *gHead = new QGroupBox( 0, Qt::Vertical, i18n( "Head Line" ), tab2 );
00500 gHead->layout()->setSpacing(KDialog::spacingHint());
00501 gHead->layout()->setMargin(KDialog::marginHint());
00502 QGridLayout *headGrid = new QGridLayout( gHead->layout(), 2, 3 );
00503
00504 QLabel *lHeadLeft = new QLabel( i18n( "Left:" ), gHead );
00505 headGrid->addWidget( lHeadLeft, 0, 0 );
00506
00507 eHeadLeft = new QLineEdit( gHead );
00508 headGrid->addWidget( eHeadLeft, 1, 0 );
00509 eHeadLeft->setText( hf.headLeft );
00510
00511 QLabel *lHeadMid = new QLabel( i18n( "Mid:" ), gHead );
00512 headGrid->addWidget( lHeadMid, 0, 1 );
00513
00514 eHeadMid = new QLineEdit( gHead );
00515 headGrid->addWidget( eHeadMid, 1, 1 );
00516 eHeadMid->setText( hf.headMid );
00517
00518 QLabel *lHeadRight = new QLabel( i18n( "Right:" ), gHead );
00519 headGrid->addWidget( lHeadRight, 0, 2 );
00520
00521 eHeadRight = new QLineEdit( gHead );
00522 headGrid->addWidget( eHeadRight, 1, 2 );
00523 eHeadRight->setText( hf.headRight );
00524
00525 grid2->addMultiCellWidget( gHead, 0, 1, 0, 1 );
00526
00527
00528 QGroupBox *gFoot = new QGroupBox( 0, Qt::Vertical, i18n( "Foot Line" ), tab2 );
00529 gFoot->layout()->setSpacing(KDialog::spacingHint());
00530 gFoot->layout()->setMargin(KDialog::marginHint());
00531 QGridLayout *footGrid = new QGridLayout( gFoot->layout(), 2, 3 );
00532
00533 QLabel *lFootLeft = new QLabel( i18n( "Left:" ), gFoot );
00534 footGrid->addWidget( lFootLeft, 0, 0 );
00535
00536 eFootLeft = new QLineEdit( gFoot );
00537 footGrid->addWidget( eFootLeft, 1, 0 );
00538 eFootLeft->setText( hf.footLeft );
00539
00540 QLabel *lFootMid = new QLabel( i18n( "Mid:" ), gFoot );
00541 footGrid->addWidget( lFootMid, 0, 1 );
00542
00543 eFootMid = new QLineEdit( gFoot );
00544 footGrid->addWidget( eFootMid, 1, 1 );
00545 eFootMid->setText( hf.footMid );
00546
00547 QLabel *lFootRight = new QLabel( i18n( "Right:" ), gFoot );
00548 footGrid->addWidget( lFootRight, 0, 2 );
00549
00550 eFootRight = new QLineEdit( gFoot );
00551 footGrid->addWidget( eFootRight, 1, 2 );
00552 eFootRight->setText( hf.footRight );
00553
00554 grid2->addMultiCellWidget( gFoot, 2, 3, 0, 1 );
00555
00556 QLabel *lMacros2 = new QLabel( i18n( "You can insert several tags in the text:" ), tab2 );
00557 grid2->addMultiCellWidget( lMacros2, 4, 4, 0, 1 );
00558
00559 QLabel *lMacros3 = new QLabel( i18n("<qt><ul><li><sheet> The sheet name</li>"
00560 "<li><page> The current page</li>"
00561 "<li><pages> The total number of pages</li>"
00562 "<li><name> The filename or URL</li>"
00563 "<li><file> The filename with complete path or the URL</li></ul></qt>"), tab2 );
00564 grid2->addMultiCellWidget( lMacros3, 5, 6, 0, 0, Qt::AlignTop );
00565
00566 QLabel *lMacros4 = new QLabel( i18n("<qt><ul><li><time> The current time</li>"
00567 "<li><date> The current date</li>"
00568 "<li><author> Your full name</li>"
00569 "<li><org> Your organization</li>"
00570 "<li><email> Your email address</li></ul></qt>"), tab2 );
00571 grid2->addMultiCellWidget( lMacros4, 5, 6, 1, 1, Qt::AlignTop );
00572 }
00573
00574
00575 void KoPageLayoutDia::setupTab3()
00576 {
00577 QWidget *tab3 = addPage(i18n( "Col&umns" ));
00578
00579 QGridLayout *grid3 = new QGridLayout( tab3, 5, 2, KDialog::marginHint(), KDialog::spacingHint() );
00580
00581 QLabel *lColumns = new QLabel( i18n( "Co&lumns:" ), tab3 );
00582 grid3->addWidget( lColumns, 0, 0 );
00583
00584 nColumns = new QSpinBox( 1, 16, 1, tab3 );
00585 lColumns->setBuddy( nColumns );
00586 grid3->addWidget( nColumns, 1, 0 );
00587 nColumns->setValue( cl.columns );
00588 connect( nColumns, SIGNAL( valueChanged( int ) ), this, SLOT( nColChanged( int ) ) );
00589
00590 QString str = KoUnit::unitName( m_unit );
00591
00592 QLabel *lCSpacing = new QLabel( i18n("Column &spacing (%1):").arg(str), tab3 );
00593 grid3->addWidget( lCSpacing, 2, 0 );
00594
00595 nCSpacing = new KDoubleNumInput( tab3, "" );
00596 lCSpacing->setBuddy( nCSpacing );
00597 grid3->addWidget( nCSpacing, 3, 0 );
00598
00599 nCSpacing->setValue( KoUnit::ptToUnit( cl.ptColumnSpacing, m_unit ) );
00600 connect( nCSpacing, SIGNAL( valueChanged(double) ),
00601 this, SLOT( nSpaceChanged( double ) ) );
00602
00603
00604 pgPreview2 = new KoPagePreview( tab3, "Preview", layout );
00605 grid3->addMultiCellWidget( pgPreview2, 0, 4, 1, 1 );
00606
00607
00608 grid3->addColSpacing( 0, lColumns->width() );
00609 grid3->addColSpacing( 0, nColumns->width() );
00610 grid3->addColSpacing( 0, lCSpacing->width() );
00611 grid3->addColSpacing( 0, nCSpacing->width() );
00612 grid3->addColSpacing( 1, pgPreview2->width() );
00613 grid3->setColStretch( 1, 1 );
00614
00615 grid3->addRowSpacing( 0, lColumns->height() );
00616 grid3->addRowSpacing( 1, nColumns->height() );
00617 grid3->addRowSpacing( 2, lCSpacing->height() );
00618 grid3->addRowSpacing( 3, nCSpacing->height() );
00619 grid3->setRowStretch( 4, 1 );
00620
00621 if ( pgPreview ) pgPreview->setPageColumns( cl );
00622 pgPreview2->setPageColumns( cl );
00623 }
00624
00625
00626 void KoPageLayoutDia::setupTab4()
00627 {
00628 QString str = KoUnit::unitName(m_unit);
00629
00630 QWidget *tab4 = addPage(i18n( "H&eader && Footer" ));
00631 QGridLayout *grid4 = new QGridLayout( tab4, 4, 1, KDialog::marginHint(), KDialog::spacingHint() );
00632
00633 QButtonGroup *gHeader = new QButtonGroup( 0, Qt::Vertical, i18n( "&Header" ), tab4 );
00634 gHeader->layout()->setSpacing(KDialog::spacingHint());
00635 gHeader->layout()->setMargin(KDialog::marginHint());
00636 QGridLayout *headerGrid = new QGridLayout( gHeader->layout(), 4, 2 );
00637
00638 rhFirst = new QCheckBox( i18n( "Different header for the first page" ), gHeader );
00639 gHeader->insert( rhFirst );
00640 headerGrid->addMultiCellWidget( rhFirst, 1, 1, 0, 1 );
00641 if ( kwhf.header == HF_FIRST_DIFF || kwhf.header == HF_FIRST_EO_DIFF )
00642 rhFirst->setChecked( true );
00643
00644 rhEvenOdd = new QCheckBox( i18n( "Different header for even and odd pages" ), gHeader );
00645 gHeader->insert( rhEvenOdd );
00646 headerGrid->addMultiCellWidget( rhEvenOdd, 2, 2, 0, 1 );
00647 if ( kwhf.header == HF_EO_DIFF || kwhf.header == HF_FIRST_EO_DIFF )
00648 rhEvenOdd->setChecked( true );
00649
00650 QLabel *lHSpacing = new QLabel( i18n("Spacing between header and body (%1):").arg(str), gHeader );
00651 lHSpacing->setAlignment( AlignRight | AlignVCenter );
00652 headerGrid->addWidget( lHSpacing, 4, 0 );
00653
00654 nHSpacing = new KDoubleNumInput( gHeader, "" );
00655 headerGrid->addWidget( nHSpacing, 4, 1 );
00656
00657 nHSpacing->setValue( KoUnit::ptToUnit( kwhf.ptHeaderBodySpacing, m_unit ) );
00658
00659 headerGrid->addRowSpacing( 0, KDialog::spacingHint() );
00660
00661 grid4->addWidget( gHeader, 0, 0 );
00662
00663 QButtonGroup *gFooter = new QButtonGroup( 0, Qt::Vertical, i18n( "&Footer" ), tab4 );
00664 gFooter->layout()->setSpacing(KDialog::spacingHint());
00665 gFooter->layout()->setMargin(KDialog::marginHint());
00666 QGridLayout *footerGrid = new QGridLayout( gFooter->layout(), 4, 2 );
00667
00668 rfFirst = new QCheckBox( i18n( "Different footer for the first page" ), gFooter );
00669 gFooter->insert( rfFirst );
00670 footerGrid->addMultiCellWidget( rfFirst, 1, 1, 0, 1 );
00671 if ( kwhf.footer == HF_FIRST_DIFF || kwhf.footer == HF_FIRST_EO_DIFF )
00672 rfFirst->setChecked( true );
00673
00674 rfEvenOdd = new QCheckBox( i18n( "Different footer for even and odd pages" ), gFooter );
00675 gFooter->insert( rfEvenOdd );
00676 footerGrid->addMultiCellWidget( rfEvenOdd, 2, 2, 0, 1 );
00677 if ( kwhf.footer == HF_EO_DIFF || kwhf.footer == HF_FIRST_EO_DIFF )
00678 rfEvenOdd->setChecked( true );
00679
00680 QLabel *lFSpacing = new QLabel( i18n("Spacing between footer and body (%1):").arg(str), gFooter );
00681 lFSpacing->setAlignment( AlignRight | AlignVCenter );
00682 footerGrid->addWidget( lFSpacing, 4, 0 );
00683
00684 nFSpacing = new KDoubleNumInput( gFooter, "" );
00685 footerGrid->addWidget( nFSpacing, 4, 1 );
00686
00687 nFSpacing->setValue(KoUnit::ptToUnit( kwhf.ptFooterBodySpacing, m_unit ) );
00688
00689 footerGrid->addRowSpacing( 0, KDialog::spacingHint() );
00690
00691 grid4->addWidget( gFooter, 2, 0 );
00692
00693 QButtonGroup *gFootNote = new QButtonGroup( 0, Qt::Vertical, i18n( "Foot¬e/Endnote" ), tab4 );
00694 gFootNote->layout()->setSpacing(KDialog::spacingHint());
00695 gFootNote->layout()->setMargin(KDialog::marginHint());
00696 QGridLayout *footNoteGrid = new QGridLayout( gFootNote->layout(), 2, 2 );
00697
00698 QLabel *lFNSpacing = new QLabel( i18n("Spacing between footnote and body (%1):").arg(str), gFootNote );
00699 lFNSpacing->setAlignment( AlignRight | AlignVCenter );
00700 footNoteGrid->addWidget( lFNSpacing, 1, 0 );
00701
00702 nFNSpacing = new KDoubleNumInput( gFootNote, "" );
00703 footNoteGrid->addWidget( nFNSpacing, 1, 1 );
00704
00705 nFNSpacing->setValue(KoUnit::ptToUnit( kwhf.ptFootNoteBodySpacing, m_unit ) );
00706
00707 footNoteGrid->addRowSpacing( 0, KDialog::spacingHint() );
00708
00709 grid4->addWidget( gFootNote, 3, 0 );
00710
00711 grid4->setRowStretch( 1, 1 );
00712 grid4->setRowStretch( 2, 1 );
00713 grid4->setRowStretch( 4, 10 );
00714 }
00715
00716
00717 void KoPageLayoutDia::updatePreview( const KoPageLayout& )
00718 {
00719 if ( pgPreview ) pgPreview->setPageLayout( layout );
00720 if ( pgPreview ) pgPreview->setPageColumns( cl );
00721 if ( pgPreview2 ) pgPreview2->setPageLayout( layout );
00722 if ( pgPreview2 ) pgPreview2->setPageColumns( cl );
00723 }
00724
00725
00726 void KoPageLayoutDia::unitChanged( int _unit )
00727 {
00728 m_unit = static_cast<KoUnit::Unit>( _unit );
00729 setValuesTab1Helper();
00730 updatePreview( layout );
00731 }
00732
00733
00734 void KoPageLayoutDia::formatChanged( int _format )
00735 {
00736 if ( ( KoFormat )_format != layout.format ) {
00737 bool enable = true;
00738
00739 layout.format = ( KoFormat )_format;
00740 if ( ( KoFormat )_format != PG_CUSTOM ) enable = false;
00741 epgWidth->setEnabled( enable );
00742 epgHeight->setEnabled( enable );
00743
00744 double w = layout.ptWidth;
00745 double h = layout.ptHeight;
00746 if ( layout.format != PG_CUSTOM )
00747 {
00748 w = MM_TO_POINT( KoPageFormat::width( layout.format, layout.orientation ) );
00749 h = MM_TO_POINT( KoPageFormat::height( layout.format, layout.orientation ) );
00750 }
00751
00752 layout.ptWidth = w;
00753 layout.ptHeight = h;
00754
00755 epgWidth->setValue( KoUnit::ptToUnit( layout.ptWidth, m_unit ) );
00756 epgHeight->setValue( KoUnit::ptToUnit( layout.ptHeight, m_unit ) );
00757
00758 updatePreview( layout );
00759 }
00760 }
00761
00762
00763
00764 void KoPageLayoutDia::orientationChanged()
00765 {
00766 KoOrientation oldOrientation = layout.orientation;
00767 layout.orientation = ( rbPortrait->isChecked() ) ? PG_PORTRAIT : PG_LANDSCAPE;
00768
00769
00770
00771 if (layout.orientation == oldOrientation) return;
00772
00773 layout.ptWidth = KoUnit::ptFromUnit( epgWidth->value(), m_unit );
00774 layout.ptHeight = KoUnit::ptFromUnit( epgHeight->value(), m_unit );
00775 layout.ptLeft = KoUnit::ptFromUnit( ebrLeft->value(), m_unit );
00776 layout.ptRight = KoUnit::ptFromUnit( ebrRight->value(), m_unit );
00777 layout.ptTop = KoUnit::ptFromUnit( ebrTop->value(), m_unit );
00778 layout.ptBottom = KoUnit::ptFromUnit( ebrBottom->value(), m_unit );
00779
00780
00781 qSwap( layout.ptWidth, layout.ptHeight );
00782 double tmp = layout.ptTop;
00783 layout.ptTop = layout.ptRight;
00784 layout.ptRight = layout.ptBottom;
00785 layout.ptBottom = layout.ptLeft;
00786 layout.ptLeft = tmp;
00787
00788 setValuesTab1();
00789 updatePreview( layout );
00790 }
00791
00792 void KoPageLayoutDia::changed(KDoubleNumInput *line, double &pt) {
00793
00794 if ( line->value() == 0 && retPressed )
00795 line->setValue( 0.0 );
00796 if ( line->value()<0)
00797 line->setValue( 0.0 );
00798 pt = KoUnit::ptFromUnit( line->value(), m_unit );
00799 retPressed = false;
00800 }
00801
00802
00803 void KoPageLayoutDia::widthChanged()
00804 {
00805 changed(epgWidth, layout.ptWidth);
00806 updatePreview( layout );
00807 }
00808
00809
00810 void KoPageLayoutDia::heightChanged()
00811 {
00812 changed(epgHeight, layout.ptHeight);
00813 updatePreview( layout );
00814 }
00815
00816
00817 void KoPageLayoutDia::leftChanged()
00818 {
00819 changed(ebrLeft, layout.ptLeft);
00820 updatePreview( layout );
00821 }
00822
00823
00824 void KoPageLayoutDia::rightChanged()
00825 {
00826 changed(ebrRight, layout.ptRight);
00827 updatePreview( layout );
00828 }
00829
00830
00831 void KoPageLayoutDia::topChanged()
00832 {
00833 changed(ebrTop, layout.ptTop);
00834 updatePreview( layout );
00835 }
00836
00837
00838 void KoPageLayoutDia::bottomChanged()
00839 {
00840 changed(ebrBottom, layout.ptBottom);
00841 updatePreview( layout );
00842 }
00843
00844
00845 void KoPageLayoutDia::nColChanged( int _val )
00846 {
00847 cl.columns = _val;
00848 updatePreview( layout );
00849 }
00850
00851
00852 void KoPageLayoutDia::nSpaceChanged( double _val )
00853 {
00854 cl.ptColumnSpacing = KoUnit::ptFromUnit( _val, m_unit );
00855 updatePreview( layout );
00856 }
00857
00858
00859
00860
00861 void KoPageLayoutDia::slotOk()
00862 {
00863 if ( layout.ptLeft + layout.ptRight > layout.ptWidth )
00864 {
00865 KMessageBox::error( this,
00866 i18n("The page width is smaller than the left and right margins."),
00867 i18n("Page Layout Problem") );
00868 return;
00869 }
00870 if ( layout.ptTop + layout.ptBottom > layout.ptHeight )
00871 {
00872 KMessageBox::error( this,
00873 i18n("The page height is smaller than the top and bottom margins."),
00874 i18n("Page Layout Problem") );
00875 return;
00876 }
00877 KDialogBase::slotOk();
00878 }
00879
00880 #include <koPageLayoutDia.moc>