diff options
Diffstat (limited to 'kexi/3rdparty/kolibs/koPageLayoutDia.cpp')
-rw-r--r-- | kexi/3rdparty/kolibs/koPageLayoutDia.cpp | 402 |
1 files changed, 402 insertions, 0 deletions
diff --git a/kexi/3rdparty/kolibs/koPageLayoutDia.cpp b/kexi/3rdparty/kolibs/koPageLayoutDia.cpp new file mode 100644 index 00000000..2f0db91a --- /dev/null +++ b/kexi/3rdparty/kolibs/koPageLayoutDia.cpp @@ -0,0 +1,402 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Reginald Stadlbauer <[email protected]> + Copyright (C) 2005 Thomas Zander <[email protected]> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +// Description: Page Layout Dialog (sources) + +/******************************************************************/ + +#include <KoPageLayoutDia.h> +#include <KoPageLayoutColumns.h> +#include <KoPageLayoutSize.h> +#include <KoPageLayoutHeader.h> +#include <KoUnit.h> +#include <KoUnitWidgets.h> + +#include <tdelocale.h> +#include <kiconloader.h> +#include <tdemessagebox.h> + +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqpainter.h> +#include <tqlineedit.h> +#include <tqbuttongroup.h> +#include <tqradiobutton.h> +#include <tqcheckbox.h> +#include <tqhbox.h> +#include <tqvgroupbox.h> +#include <tqhbuttongroup.h> + +/******************************************************************/ +/* class KoPagePreview */ +/******************************************************************/ + +/*===================== constrcutor ==============================*/ +KoPagePreview::KoPagePreview( TQWidget* parent, const char *name, const KoPageLayout& layout ) + : TQGroupBox( i18n( "Page Preview" ), parent, name ) +{ + setPageLayout( layout ); + columns = 1; + setMinimumSize( 150, 150 ); +} + +/*====================== destructor ==============================*/ +KoPagePreview::~KoPagePreview() +{ +} + +/*=================== set layout =================================*/ +void KoPagePreview::setPageLayout( const KoPageLayout &layout ) +{ + // resolution[XY] is in pixel per pt + double resolutionX = POINT_TO_INCH( static_cast<double>(KoGlobal::dpiX()) ); + double resolutionY = POINT_TO_INCH( static_cast<double>(KoGlobal::dpiY()) ); + + m_pageWidth = layout.ptWidth * resolutionX; + m_pageHeight = layout.ptHeight * resolutionY; + + double zh = 110.0 / m_pageHeight; + double zw = 110.0 / m_pageWidth; + double z = TQMIN( zw, zh ); + + m_pageWidth *= z; + m_pageHeight *= z; + + m_textFrameX = layout.ptLeft * resolutionX * z; + m_textFrameY = layout.ptTop * resolutionY * z; + m_textFrameWidth = m_pageWidth - ( layout.ptLeft + layout.ptRight ) * resolutionX * z; + m_textFrameHeight = m_pageHeight - ( layout.ptTop + layout.ptBottom ) * resolutionY * z; + + repaint( true ); +} + +/*=================== set layout =================================*/ +void KoPagePreview::setPageColumns( const KoColumns &_columns ) +{ + columns = _columns.columns; + repaint( true ); +} + +/*======================== draw contents =========================*/ +void KoPagePreview::drawContents( TQPainter *painter ) +{ + double cw = m_textFrameWidth; + if(columns!=1) + cw/=static_cast<double>(columns); + + painter->setBrush( white ); + painter->setPen( TQPen( black ) ); + + int x=static_cast<int>( ( width() - m_pageWidth ) * 0.5 ); + int y=static_cast<int>( ( height() - m_pageHeight ) * 0.5 ); + int w=static_cast<int>(m_pageWidth); + int h=static_cast<int>(m_pageHeight); + //painter->drawRect( x + 1, y + 1, w, h); + painter->drawRect( x, y, w, h ); + + painter->setBrush( TQBrush( black, HorPattern ) ); + if ( m_textFrameWidth == m_pageWidth || m_textFrameHeight == m_pageHeight ) + painter->setPen( NoPen ); + else + painter->setPen( lightGray ); + + for ( int i = 0; i < columns; ++i ) + painter->drawRect( x + static_cast<int>(m_textFrameX) + static_cast<int>(i * cw), + y + static_cast<int>(m_textFrameY), static_cast<int>(cw), + static_cast<int>(m_textFrameHeight) ); +} + +/******************************************************************/ +/* class KoPageLayoutDia */ +/******************************************************************/ + +/*==================== constructor ===============================*/ +KoPageLayoutDia::KoPageLayoutDia( TQWidget* parent, const char* name, + const KoPageLayout& layout, + const KoHeadFoot& hf, int tabs, + KoUnit::Unit unit, bool modal ) + : KDialogBase( KDialogBase::Tabbed, i18n("Page Layout"), KDialogBase::Ok | KDialogBase::Cancel, + KDialogBase::Ok, parent, name, modal) +{ + + flags = tabs; + m_layout = layout; + m_unit = unit; + m_pageSizeTab = 0; + m_columnsTab = 0; + m_headerTab = 0; + + m_column.columns = 1; + + if ( tabs & FORMAT_AND_BORDERS ) setupTab1( true ); + if ( tabs & HEADER_AND_FOOTER ) setupTab2( hf ); + + setFocusPolicy( TQ_StrongFocus ); + setFocus(); +} + +/*==================== constructor ===============================*/ +KoPageLayoutDia::KoPageLayoutDia( TQWidget* parent, const char* name, + const KoPageLayout& layout, + const KoHeadFoot& hf, + const KoColumns& columns, + const KoKWHeaderFooter& kwhf, + int tabs, KoUnit::Unit unit ) + : KDialogBase( KDialogBase::Tabbed, i18n("Page Layout"), KDialogBase::Ok | KDialogBase::Cancel, + KDialogBase::Ok, parent, name, true) +{ + flags = tabs; + + m_layout = layout; + m_column = columns; + m_unit = unit; + m_pageSizeTab = 0; + m_columnsTab = 0; + m_headerTab = 0; + + if ( tabs & FORMAT_AND_BORDERS ) setupTab1( !( tabs & DISABLE_BORDERS ) ); + if ( tabs & HEADER_AND_FOOTER ) setupTab2( hf ); + if ( tabs & COLUMNS ) setupTab3(); + if ( tabs & KW_HEADER_AND_FOOTER ) setupTab4(kwhf); + + setFocusPolicy( TQ_StrongFocus ); + setFocus(); +} + +/*===================== destructor ===============================*/ +KoPageLayoutDia::~KoPageLayoutDia() +{ +} + +/*======================= show dialog ============================*/ +bool KoPageLayoutDia::pageLayout( KoPageLayout& layout, KoHeadFoot& hf, int tabs, KoUnit::Unit& unit, TQWidget* parent ) +{ + bool res = false; + KoPageLayoutDia *dlg = new KoPageLayoutDia( parent, "PageLayout", layout, hf, tabs, unit ); + + if ( dlg->exec() == TQDialog::Accepted ) { + res = true; + if ( tabs & FORMAT_AND_BORDERS ) layout = dlg->layout(); + if ( tabs & HEADER_AND_FOOTER ) hf = dlg->headFoot(); + unit = dlg->unit(); + } + + delete dlg; + + return res; +} + +/*======================= show dialog ============================*/ +bool KoPageLayoutDia::pageLayout( KoPageLayout& layout, KoHeadFoot& hf, KoColumns& columns, + KoKWHeaderFooter &_kwhf, int tabs, KoUnit::Unit& unit, TQWidget* parent ) +{ + bool res = false; + KoPageLayoutDia *dlg = new KoPageLayoutDia( parent, "PageLayout", layout, hf, columns, _kwhf, tabs, unit ); + + if ( dlg->exec() == TQDialog::Accepted ) { + res = true; + if ( tabs & FORMAT_AND_BORDERS ) layout = dlg->layout(); + if ( tabs & HEADER_AND_FOOTER ) hf = dlg->headFoot(); + if ( tabs & COLUMNS ) columns = dlg->columns(); + if ( tabs & KW_HEADER_AND_FOOTER ) _kwhf = dlg->headerFooter(); + unit = dlg->unit(); + } + + delete dlg; + + return res; +} + +/*===================== get a standard page layout ===============*/ +KoPageLayout KoPageLayoutDia::standardLayout() +{ + return KoPageLayout::standardLayout(); +} + +/*====================== get header - footer =====================*/ +KoHeadFoot KoPageLayoutDia::headFoot() const +{ + KoHeadFoot hf; + hf.headLeft = eHeadLeft->text(); + hf.headMid = eHeadMid->text(); + hf.headRight = eHeadRight->text(); + hf.footLeft = eFootLeft->text(); + hf.footMid = eFootMid->text(); + hf.footRight = eFootRight->text(); + return hf; +} + +/*================================================================*/ +const KoKWHeaderFooter& KoPageLayoutDia::headerFooter() +{ + return m_headerTab->headerFooter(); +} + +/*================ setup page size & margins tab ==================*/ +void KoPageLayoutDia::setupTab1( bool enableBorders ) +{ + TQWidget *tab1 = addPage(i18n( "Page Size && &Margins" )); + TQHBoxLayout *lay = new TQHBoxLayout(tab1); + m_pageSizeTab = new KoPageLayoutSize(tab1, m_layout, m_unit, m_column, !(flags & DISABLE_UNIT), enableBorders ); + lay->addWidget(m_pageSizeTab); + m_pageSizeTab->show(); + connect (m_pageSizeTab, TQT_SIGNAL( propertyChange(KoPageLayout&)), + this, TQT_SLOT (sizeUpdated( KoPageLayout&))); +} + +void KoPageLayoutDia::sizeUpdated(KoPageLayout &layout) { + m_layout.ptWidth = layout.ptWidth; + m_layout.ptHeight = layout.ptHeight; + m_layout.ptLeft = layout.ptLeft; + m_layout.ptRight = layout.ptRight; + m_layout.ptTop = layout.ptTop; + m_layout.ptBottom = layout.ptBottom; + m_layout.format = layout.format; + m_layout.orientation = layout.orientation; + if(m_columnsTab) + m_columnsTab->setLayout(layout); +} + +/*================ setup header and footer tab ===================*/ +void KoPageLayoutDia::setupTab2( const KoHeadFoot& hf ) +{ + TQWidget *tab2 = addPage(i18n( "H&eader && Footer" )); + TQGridLayout *grid2 = new TQGridLayout( tab2, 7, 2, 0, KDialog::spacingHint() ); + + // ------------- header --------------- + TQGroupBox *gHead = new TQGroupBox( 0, Qt::Vertical, i18n( "Head Line" ), tab2 ); + gHead->layout()->setSpacing(KDialog::spacingHint()); + gHead->layout()->setMargin(KDialog::marginHint()); + TQGridLayout *headGrid = new TQGridLayout( gHead->layout(), 2, 3 ); + + TQLabel *lHeadLeft = new TQLabel( i18n( "Left:" ), gHead ); + headGrid->addWidget( lHeadLeft, 0, 0 ); + + eHeadLeft = new TQLineEdit( gHead ); + headGrid->addWidget( eHeadLeft, 1, 0 ); + eHeadLeft->setText( hf.headLeft ); + + TQLabel *lHeadMid = new TQLabel( i18n( "Mid:" ), gHead ); + headGrid->addWidget( lHeadMid, 0, 1 ); + + eHeadMid = new TQLineEdit( gHead ); + headGrid->addWidget( eHeadMid, 1, 1 ); + eHeadMid->setText( hf.headMid ); + + TQLabel *lHeadRight = new TQLabel( i18n( "Right:" ), gHead ); + headGrid->addWidget( lHeadRight, 0, 2 ); + + eHeadRight = new TQLineEdit( gHead ); + headGrid->addWidget( eHeadRight, 1, 2 ); + eHeadRight->setText( hf.headRight ); + + grid2->addMultiCellWidget( gHead, 0, 1, 0, 1 ); + + // ------------- footer --------------- + TQGroupBox *gFoot = new TQGroupBox( 0, Qt::Vertical, i18n( "Foot Line" ), tab2 ); + gFoot->layout()->setSpacing(KDialog::spacingHint()); + gFoot->layout()->setMargin(KDialog::marginHint()); + TQGridLayout *footGrid = new TQGridLayout( gFoot->layout(), 2, 3 ); + + TQLabel *lFootLeft = new TQLabel( i18n( "Left:" ), gFoot ); + footGrid->addWidget( lFootLeft, 0, 0 ); + + eFootLeft = new TQLineEdit( gFoot ); + footGrid->addWidget( eFootLeft, 1, 0 ); + eFootLeft->setText( hf.footLeft ); + + TQLabel *lFootMid = new TQLabel( i18n( "Mid:" ), gFoot ); + footGrid->addWidget( lFootMid, 0, 1 ); + + eFootMid = new TQLineEdit( gFoot ); + footGrid->addWidget( eFootMid, 1, 1 ); + eFootMid->setText( hf.footMid ); + + TQLabel *lFootRight = new TQLabel( i18n( "Right:" ), gFoot ); + footGrid->addWidget( lFootRight, 0, 2 ); + + eFootRight = new TQLineEdit( gFoot ); + footGrid->addWidget( eFootRight, 1, 2 ); + eFootRight->setText( hf.footRight ); + + grid2->addMultiCellWidget( gFoot, 2, 3, 0, 1 ); + + TQLabel *lMacros2 = new TQLabel( i18n( "You can insert several tags in the text:" ), tab2 ); + grid2->addMultiCellWidget( lMacros2, 4, 4, 0, 1 ); + + TQLabel *lMacros3 = new TQLabel( i18n("<qt><ul><li><sheet> The sheet name</li>" + "<li><page> The current page</li>" + "<li><pages> The total number of pages</li>" + "<li><name> The filename or URL</li>" + "<li><file> The filename with complete path or the URL</li></ul></qt>"), tab2 ); + grid2->addMultiCellWidget( lMacros3, 5, 6, 0, 0, TQt::AlignTop ); + + TQLabel *lMacros4 = new TQLabel( i18n("<qt><ul><li><time> The current time</li>" + "<li><date> The current date</li>" + "<li><author> Your full name</li>" + "<li><org> Your organization</li>" + "<li><email> Your email address</li></ul></qt>"), tab2 ); + grid2->addMultiCellWidget( lMacros4, 5, 6, 1, 1, TQt::AlignTop ); +} + +/*================================================================*/ +void KoPageLayoutDia::setupTab3() +{ + TQWidget *tab3 = addPage(i18n( "Col&umns" )); + TQHBoxLayout *lay = new TQHBoxLayout(tab3); + m_columnsTab = new KoPageLayoutColumns(tab3, m_column, m_unit, m_layout); + m_columnsTab->layout()->setMargin(0); + lay->addWidget(m_columnsTab); + m_columnsTab->show(); + connect (m_columnsTab, TQT_SIGNAL( propertyChange(KoColumns&)), + this, TQT_SLOT (columnsUpdated( KoColumns&))); +} + +void KoPageLayoutDia::columnsUpdated(KoColumns &columns) { + m_column.columns = columns.columns; + m_column.ptColumnSpacing = columns.ptColumnSpacing; + if(m_pageSizeTab) + m_pageSizeTab->setColumns(columns); +} + +/*================================================================*/ +void KoPageLayoutDia::setupTab4(const KoKWHeaderFooter kwhf ) +{ + TQWidget *tab4 = addPage(i18n( "H&eader && Footer" )); + TQHBoxLayout *lay = new TQHBoxLayout(tab4); + m_headerTab = new KoPageLayoutHeader(tab4, m_unit, kwhf); + m_headerTab->layout()->setMargin(0); + lay->addWidget(m_headerTab); + m_headerTab->show(); + +} + + +/* Validation when closing. Error messages are never liked, but + better let the users enter all values in any order, and have one + final validation, than preventing them from entering values. */ +void KoPageLayoutDia::slotOk() +{ + if( m_pageSizeTab ) + m_pageSizeTab->queryClose(); + KDialogBase::slotOk(); // accept +} + +#include <koPageLayoutDia.moc> |