summaryrefslogtreecommitdiffabout
path: root/korganizer/calprinter.cpp
Side-by-side diff
Diffstat (limited to 'korganizer/calprinter.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calprinter.cpp299
1 files changed, 299 insertions, 0 deletions
diff --git a/korganizer/calprinter.cpp b/korganizer/calprinter.cpp
new file mode 100644
index 0000000..6b5b0fe
--- a/dev/null
+++ b/korganizer/calprinter.cpp
@@ -0,0 +1,299 @@
+/*
+ This file is part of KOrganizer.
+ Copyright (c) 1998 Preston Brown
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <qvbuttongroup.h>
+#include <qwidgetstack.h>
+#include <qradiobutton.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qvbox.h>
+#include <qsplitter.h>
+
+#include <kprinter.h>
+#include <kglobal.h>
+#include <ksimpleconfig.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+//#include <kdeversion.h>
+
+#include "koprefsdialog.h"
+
+#include "calprinter.h"
+#ifndef KORG_NOPRINTER
+//#include "calprinter.moc"
+
+#include "calprintplugins.h"
+
+CalPrinter::CalPrinter( QWidget *parent, Calendar *calendar )
+ : QObject( parent, "CalPrinter" )
+{
+ mCalendar = calendar;
+ mParent = parent;
+ mPrinter = new KPrinter;
+ mPrinter->setOrientation( KPrinter::Portrait );
+ mConfig = new KConfig(locateLocal("config","korganizer_printing.rc" ));
+ //KSimpleConfig( "korganizer_printing.rc" );
+
+ init( mPrinter, calendar );
+}
+
+CalPrinter::~CalPrinter()
+{
+ kdDebug() << "~CalPrinter()" << endl;
+
+ CalPrintBase *plug = mPrintPlugins.first();
+ while ( plug ) {
+ plug->doSaveConfig();
+ plug = mPrintPlugins.next();
+ }
+ mConfig->sync();
+ delete mConfig;
+ delete mPrintDialog;
+ delete mPrinter;
+}
+
+void CalPrinter::init( KPrinter *printer, Calendar *calendar )
+{
+ mPrintPlugins.setAutoDelete( true );
+ mPrintPlugins.append( new CalPrintDay( printer, calendar, mConfig ) );
+ mPrintPlugins.append( new CalPrintWeek( printer, calendar, mConfig ) );
+ mPrintPlugins.append( new CalPrintMonth( printer, calendar, mConfig ) );
+ mPrintPlugins.append( new CalPrintTodos( printer, calendar, mConfig ) );
+
+ // TODO_RK: Add a plugin interface here
+ mPrintDialog = new CalPrintDialog( mPrintPlugins, mPrinter, mParent );
+
+ CalPrintBase *plug = mPrintPlugins.first();
+ while ( plug ) {
+ connect( mPrintDialog, SIGNAL( okClicked() ),
+ plug, SLOT( readSettingsWidget() ) );
+
+ plug->doLoadConfig();
+
+ plug = mPrintPlugins.next();
+ }
+}
+
+void CalPrinter::setupPrinter()
+{
+ KMessageBox::sorry( mParent, i18n("Not implemented.") );
+#if 0
+ KOPrefsDialog *optionsDlg = new KOPrefsDialog(mParent);
+ optionsDlg->readConfig();
+ optionsDlg->showPrinterTab();
+ connect(optionsDlg, SIGNAL(configChanged()),
+ mParent, SLOT(updateConfig()));
+ optionsDlg->show();
+#endif
+}
+
+void CalPrinter::setDateRange( const QDate &fd, const QDate &td )
+{
+ CalPrintBase *plug = mPrintPlugins.first();
+ while ( plug ) {
+ plug->setDateRange( fd, td );
+ plug = mPrintPlugins.next();
+ }
+}
+
+void CalPrinter::preview( PrintType type, const QDate &fd, const QDate &td )
+{
+ mPrintDialog->setPreview( true );
+ mPrintDialog->setPrintType( int( type ) );
+ setDateRange( fd, td );
+
+ if ( mPrintDialog->exec() == QDialog::Accepted ) {
+ doPrint( mPrintDialog->selectedPlugin(), true );
+ }
+}
+
+void CalPrinter::print( PrintType type, const QDate &fd, const QDate &td )
+{
+ mPrintDialog->resize( 640, 380 );
+ mPrintDialog->setPreview( false );
+ mPrintDialog->setPrintType( int( type ) );
+ setDateRange( fd, td );
+
+ if ( mPrintDialog->exec() == QDialog::Accepted ) {
+ doPrint( mPrintDialog->selectedPlugin(), false );
+ }
+}
+
+void CalPrinter::doPrint( CalPrintBase *selectedStyle, bool preview )
+{
+ // FIXME: add a better caption to the Printingdialog
+ //mPrinter->setPreviewOnly( preview );
+ if ( preview || mPrinter->setup( mParent ) ) {
+ switch ( mPrintDialog->orientation() ) {
+ case eOrientPlugin:
+ mPrinter->setOrientation( selectedStyle->orientation());
+ break;
+ case eOrientPortrait:
+ mPrinter->setOrientation( KPrinter::Portrait );
+ break;
+ case eOrientLandscape:
+ mPrinter->setOrientation( KPrinter::Landscape );
+ break;
+ case eOrientPrinter:
+ default:
+ break;
+ }
+ selectedStyle->doPrint();
+ }
+ //mPrinter->setPreviewOnly( false );
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
+void CalPrinter::updateConfig()
+{
+}
+
+
+/****************************************************************************/
+
+CalPrintDialog::CalPrintDialog( QPtrList<CalPrintBase> plugins, KPrinter *p,
+ QWidget *parent, const char *name )
+ : KDialogBase( parent, name, /*modal*/true, i18n("Print"), Ok | Cancel ),
+ mPrinter( p ), mPrintPlugins( plugins )
+{
+ QVBox *page = new QVBox(this);//makeVBoxMainWidget();
+ setMainWidget( page );
+ QHBox *printerLayout = new QHBox( page );
+
+ mPrinterLabel = new QLabel( printerLayout );
+ QPushButton *setupButton = new QPushButton( i18n("&Setup Printer..."),
+ printerLayout );
+ setupButton->setSizePolicy( QSizePolicy(
+ (QSizePolicy::SizeType)4, (QSizePolicy::SizeType)0,
+ 0, 0, setupButton->sizePolicy().hasHeightForWidth() ) );
+
+ QSplitter *splitter = new QSplitter( page );
+ splitter->setOrientation( QSplitter::Horizontal );
+
+ mTypeGroup = new QVButtonGroup( i18n("View Type"), splitter, "buttonGroup" );
+ // use the minimal width possible = max width of the radio buttons, not extensible
+/* mTypeGroup->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)4,
+ (QSizePolicy::SizeType)5, 0, 0,
+ mTypeGroup->sizePolicy().hasHeightForWidth() ) );*/
+
+ QWidget *splitterRight = new QWidget( splitter, "splitterRight" );
+ QGridLayout *splitterRightLayout = new QGridLayout( splitterRight );
+ splitterRightLayout->setMargin( marginHint() );
+ splitterRightLayout->setSpacing( spacingHint() );
+
+ mConfigArea = new QWidgetStack( splitterRight, "configWidgetStack" );
+ splitterRightLayout->addMultiCellWidget( mConfigArea, 0,0, 0,1 );
+
+ QLabel *orientationLabel = new QLabel( i18n("Page &orientation:"),
+ splitterRight, "orientationLabel" );
+ splitterRightLayout->addWidget( orientationLabel, 1, 0 );
+
+ mOrientationSelection = new QComboBox( splitterRight, "orientationCombo" );
+ mOrientationSelection->insertItem( i18n("Use Default of Selected Style") );
+ mOrientationSelection->insertItem( i18n("Use Default Setting of Printer") );
+ mOrientationSelection->insertItem( i18n("Portrait") );
+ mOrientationSelection->insertItem( i18n("Landscape") );
+ splitterRightLayout->addWidget( mOrientationSelection, 1, 1 );
+
+ // signals and slots connections
+ connect( setupButton, SIGNAL( clicked() ), SLOT( setupPrinter() ) );
+ connect( mTypeGroup, SIGNAL( clicked( int ) ), SLOT( setPrintType( int ) ) );
+
+ // buddies
+ orientationLabel->setBuddy( mOrientationSelection );
+
+ CalPrintBase *plug = mPrintPlugins.first();
+ QRadioButton *radioButton;
+ int id = 0;
+ while ( plug ) {
+ radioButton = new QRadioButton( plug->description(), mTypeGroup );
+ mTypeGroup->insert( radioButton, id );
+ //radioButton->setMinimumHeight( radioButton->sizeHint().height() - 5 );
+
+ mConfigArea->addWidget( plug->configWidget( mConfigArea ), id );
+
+ plug = mPrintPlugins.next();
+ id++;
+ }
+
+ // setMinimumSize( minimumSizeHint() );
+ //resize( minimumSizeHint() );
+}
+
+CalPrintDialog::~CalPrintDialog()
+{
+}
+
+void CalPrintDialog::setupPrinter()
+{
+ if ( mPrinter->setup( this ) ) {
+ setPrinterLabel();
+ }
+}
+
+void CalPrintDialog::setPreview(bool preview)
+{
+
+ setButtonText(KDialogBase::Ok, preview ? i18n("&Preview") : i18n("&Print...") );
+
+ mPreviewText = preview ? i18n("<qt>Preview for printer <b>%1</b></qt>")
+ : i18n( "<qt>Printing on printer <b>%1</b></qt>");
+ setPrinterLabel();
+}
+
+void CalPrintDialog::setPrinterLabel()
+{
+ QString printerName( mPrinter->printerName() );
+ if ( printerName.isEmpty() )
+ mPrinterLabel->setText( mPreviewText.arg( i18n("[Unconfigured]") ) );
+ else
+ mPrinterLabel->setText( mPreviewText.arg( printerName ) );
+}
+
+void CalPrintDialog::setPrintType( int i )
+{
+ // TODO: Make a safe correlation between type and the radio button
+
+ mTypeGroup->setButton( i );
+ mConfigArea->raiseWidget( i );
+}
+
+CalPrintBase *CalPrintDialog::selectedPlugin()
+{
+ int pos = mTypeGroup->id( mTypeGroup->selected() );
+ if ( pos < 0 ) return 0;
+ CalPrintBase *retval = mPrintPlugins.at( pos );
+ return retval;
+}
+
+void CalPrintDialog::slotOk()
+{
+ mOrientation = (CalPrinter::ePrintOrientation)mOrientationSelection->currentItem();
+ KDialogBase::slotOk();
+ emit okClicked();
+}
+
+#endif