korganizer Library API Documentation

calprinter.cpp

00001 /* 00002 This file is part of KOrganizer. 00003 Copyright (c) 1998 Preston Brown 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 00019 As a special exception, permission is given to link this program 00020 with any edition of Qt, and distribute the resulting executable, 00021 without including the source code for Qt in the source distribution. 00022 */ 00023 00024 #include <qvbuttongroup.h> 00025 #include <qwidgetstack.h> 00026 #include <qradiobutton.h> 00027 #include <qlayout.h> 00028 #include <qpushbutton.h> 00029 #include <qcombobox.h> 00030 #include <qlabel.h> 00031 #include <qvbox.h> 00032 #include <qsplitter.h> 00033 00034 #include <kprinter.h> 00035 #include <ksimpleconfig.h> 00036 #include <kmessagebox.h> 00037 #include <kdebug.h> 00038 #include <kdeversion.h> 00039 00040 #include "koprefsdialog.h" 00041 00042 #include "calprinter.h" 00043 #ifndef KORG_NOPRINTER 00044 #include "calprinter.moc" 00045 00046 #include "calprintplugins.h" 00047 00048 CalPrinter::CalPrinter( QWidget *parent, Calendar *calendar ) 00049 : QObject( parent, "CalPrinter" ) 00050 { 00051 mCalendar = calendar; 00052 mParent = parent; 00053 mPrinter = new KPrinter; 00054 mPrinter->setOrientation( KPrinter::Portrait ); 00055 mConfig = new KSimpleConfig( "korganizer_printing.rc" ); 00056 00057 init( mPrinter, calendar ); 00058 } 00059 00060 CalPrinter::~CalPrinter() 00061 { 00062 kdDebug() << "~CalPrinter()" << endl; 00063 00064 CalPrintBase *plug = mPrintPlugins.first(); 00065 while ( plug ) { 00066 plug->doSaveConfig(); 00067 plug = mPrintPlugins.next(); 00068 } 00069 00070 delete mConfig; 00071 delete mPrintDialog; 00072 delete mPrinter; 00073 } 00074 00075 void CalPrinter::init( KPrinter *printer, Calendar *calendar ) 00076 { 00077 mPrintPlugins.setAutoDelete( true ); 00078 mPrintPlugins.append( new CalPrintDay( printer, calendar, mConfig ) ); 00079 mPrintPlugins.append( new CalPrintWeek( printer, calendar, mConfig ) ); 00080 mPrintPlugins.append( new CalPrintMonth( printer, calendar, mConfig ) ); 00081 mPrintPlugins.append( new CalPrintTodos( printer, calendar, mConfig ) ); 00082 00083 // TODO_RK: Add a plugin interface here 00084 mPrintDialog = new CalPrintDialog( mPrintPlugins, mPrinter, mParent ); 00085 00086 CalPrintBase *plug = mPrintPlugins.first(); 00087 while ( plug ) { 00088 connect( mPrintDialog, SIGNAL( okClicked() ), 00089 plug, SLOT( readSettingsWidget() ) ); 00090 00091 plug->doLoadConfig(); 00092 00093 plug = mPrintPlugins.next(); 00094 } 00095 } 00096 00097 void CalPrinter::setupPrinter() 00098 { 00099 KMessageBox::sorry( mParent, i18n("Not implemented.") ); 00100 #if 0 00101 KOPrefsDialog *optionsDlg = new KOPrefsDialog(mParent); 00102 optionsDlg->readConfig(); 00103 optionsDlg->showPrinterTab(); 00104 connect(optionsDlg, SIGNAL(configChanged()), 00105 mParent, SLOT(updateConfig())); 00106 optionsDlg->show(); 00107 #endif 00108 } 00109 00110 void CalPrinter::setDateRange( const QDate &fd, const QDate &td ) 00111 { 00112 CalPrintBase *plug = mPrintPlugins.first(); 00113 while ( plug ) { 00114 plug->setDateRange( fd, td ); 00115 plug = mPrintPlugins.next(); 00116 } 00117 } 00118 00119 void CalPrinter::preview( PrintType type, const QDate &fd, const QDate &td ) 00120 { 00121 mPrintDialog->setPreview( true ); 00122 mPrintDialog->setPrintType( int( type ) ); 00123 setDateRange( fd, td ); 00124 00125 if ( mPrintDialog->exec() == QDialog::Accepted ) { 00126 doPrint( mPrintDialog->selectedPlugin(), true ); 00127 } 00128 } 00129 00130 void CalPrinter::print( PrintType type, const QDate &fd, const QDate &td ) 00131 { 00132 mPrintDialog->setPreview( false ); 00133 mPrintDialog->setPrintType( int( type ) ); 00134 setDateRange( fd, td ); 00135 00136 if ( mPrintDialog->exec() == QDialog::Accepted ) { 00137 doPrint( mPrintDialog->selectedPlugin(), false ); 00138 } 00139 } 00140 00141 void CalPrinter::doPrint( CalPrintBase *selectedStyle, bool preview ) 00142 { 00143 // FIXME: add a better caption to the Printingdialog 00144 mPrinter->setPreviewOnly( preview ); 00145 if ( preview || mPrinter->setup( mParent, i18n("Print Calendar") ) ) { 00146 switch ( mPrintDialog->orientation() ) { 00147 case eOrientPlugin: 00148 mPrinter->setOrientation( selectedStyle->orientation()); 00149 break; 00150 case eOrientPortrait: 00151 mPrinter->setOrientation( KPrinter::Portrait ); 00152 break; 00153 case eOrientLandscape: 00154 mPrinter->setOrientation( KPrinter::Landscape ); 00155 break; 00156 case eOrientPrinter: 00157 default: 00158 break; 00159 } 00160 selectedStyle->doPrint(); 00161 } 00162 mPrinter->setPreviewOnly( false ); 00163 } 00164 00166 00167 void CalPrinter::updateConfig() 00168 { 00169 } 00170 00171 00172 00173 /****************************************************************************/ 00174 00175 CalPrintDialog::CalPrintDialog( QPtrList<CalPrintBase> plugins, KPrinter *p, 00176 QWidget *parent, const char *name ) 00177 : KDialogBase( parent, name, /*modal*/true, i18n("Print"), Ok | Cancel ), 00178 mPrinter( p ), mPrintPlugins( plugins ) 00179 { 00180 QVBox *page = makeVBoxMainWidget(); 00181 00182 QHBox *printerLayout = new QHBox( page ); 00183 00184 mPrinterLabel = new QLabel( printerLayout ); 00185 QPushButton *setupButton = new QPushButton( i18n("&Setup Printer..."), 00186 printerLayout ); 00187 setupButton->setSizePolicy( QSizePolicy( 00188 (QSizePolicy::SizeType)4, (QSizePolicy::SizeType)0, 00189 0, 0, setupButton->sizePolicy().hasHeightForWidth() ) ); 00190 00191 QSplitter *splitter = new QSplitter( page ); 00192 splitter->setOrientation( QSplitter::Horizontal ); 00193 00194 mTypeGroup = new QVButtonGroup( i18n("View Type"), splitter, "buttonGroup" ); 00195 // use the minimal width possible = max width of the radio buttons, not extensible 00196 /* mTypeGroup->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)4, 00197 (QSizePolicy::SizeType)5, 0, 0, 00198 mTypeGroup->sizePolicy().hasHeightForWidth() ) );*/ 00199 00200 QWidget *splitterRight = new QWidget( splitter, "splitterRight" ); 00201 QGridLayout *splitterRightLayout = new QGridLayout( splitterRight ); 00202 splitterRightLayout->setMargin( marginHint() ); 00203 splitterRightLayout->setSpacing( spacingHint() ); 00204 00205 mConfigArea = new QWidgetStack( splitterRight, "configWidgetStack" ); 00206 splitterRightLayout->addMultiCellWidget( mConfigArea, 0,0, 0,1 ); 00207 00208 QLabel *orientationLabel = new QLabel( i18n("Page &orientation:"), 00209 splitterRight, "orientationLabel" ); 00210 splitterRightLayout->addWidget( orientationLabel, 1, 0 ); 00211 00212 mOrientationSelection = new QComboBox( splitterRight, "orientationCombo" ); 00213 mOrientationSelection->insertItem( i18n("Use Default of Selected Style") ); 00214 mOrientationSelection->insertItem( i18n("Use Default Setting of Printer") ); 00215 mOrientationSelection->insertItem( i18n("Portrait") ); 00216 mOrientationSelection->insertItem( i18n("Landscape") ); 00217 splitterRightLayout->addWidget( mOrientationSelection, 1, 1 ); 00218 00219 // signals and slots connections 00220 connect( setupButton, SIGNAL( clicked() ), SLOT( setupPrinter() ) ); 00221 connect( mTypeGroup, SIGNAL( clicked( int ) ), SLOT( setPrintType( int ) ) ); 00222 00223 // buddies 00224 orientationLabel->setBuddy( mOrientationSelection ); 00225 00226 CalPrintBase *plug = mPrintPlugins.first(); 00227 QRadioButton *radioButton; 00228 int id = 0; 00229 while ( plug ) { 00230 radioButton = new QRadioButton( plug->description(), mTypeGroup ); 00231 mTypeGroup->insert( radioButton, id ); 00232 radioButton->setMinimumHeight( radioButton->sizeHint().height() - 5 ); 00233 00234 mConfigArea->addWidget( plug->configWidget( mConfigArea ), id ); 00235 00236 plug = mPrintPlugins.next(); 00237 id++; 00238 } 00239 00240 setMinimumSize( minimumSizeHint() ); 00241 resize( minimumSizeHint() ); 00242 } 00243 00244 CalPrintDialog::~CalPrintDialog() 00245 { 00246 } 00247 00248 void CalPrintDialog::setupPrinter() 00249 { 00250 if ( mPrinter->setup( this, i18n("Setup printer") ) ) { 00251 setPrinterLabel(); 00252 } 00253 } 00254 00255 void CalPrintDialog::setPreview(bool preview) 00256 { 00257 #if KDE_IS_VERSION( 3, 1, 93 ) 00258 setButtonOK( preview ? i18n("&Preview") : KStdGuiItem::print() ); 00259 #else 00260 setButtonOKText( preview ? i18n("&Preview") : i18n("&Print...") ); 00261 #endif 00262 mPreviewText = preview ? i18n("<qt>Preview for printer <b>%1</b></qt>") 00263 : i18n( "<qt>Printing on printer <b>%1</b></qt>"); 00264 setPrinterLabel(); 00265 } 00266 00267 void CalPrintDialog::setPrinterLabel() 00268 { 00269 QString printerName( mPrinter->printerName() ); 00270 if ( printerName.isEmpty() ) 00271 mPrinterLabel->setText( mPreviewText.arg( i18n("[Unconfigured]") ) ); 00272 else 00273 mPrinterLabel->setText( mPreviewText.arg( printerName ) ); 00274 } 00275 00276 void CalPrintDialog::setPrintType( int i ) 00277 { 00278 // TODO: Make a safe correlation between type and the radio button 00279 00280 mTypeGroup->setButton( i ); 00281 mConfigArea->raiseWidget( i ); 00282 } 00283 00284 CalPrintBase *CalPrintDialog::selectedPlugin() 00285 { 00286 int pos = mTypeGroup->id( mTypeGroup->selected() ); 00287 if ( pos < 0 ) return 0; 00288 CalPrintBase *retval = mPrintPlugins.at( pos ); 00289 return retval; 00290 } 00291 00292 void CalPrintDialog::slotOk() 00293 { 00294 mOrientation = (CalPrinter::ePrintOrientation)mOrientationSelection->currentItem(); 00295 KDialogBase::slotOk(); 00296 } 00297 00298 #endif
KDE Logo
This file is part of the documentation for korganizer Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Oct 1 15:19:30 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003