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 <kdebug.h>
00025 #include <kapplication.h>
00026 #include <kstandarddirs.h>
00027 #include <kcolorbutton.h>
00028 #include <klocale.h>
00029 #include <kprinter.h>
00030 #include <kfontcombo.h>
00031 #include <kglobalsettings.h>
00032 #include <knuminput.h>
00033 #include <kdialog.h>
00034 #include <kconfig.h>
00035 #include <qpainter.h>
00036 #include <qcheckbox.h>
00037 #include <qlayout.h>
00038 #include <qpaintdevicemetrics.h>
00039
00040 #include "detailledstyle.h"
00041 #include "printingwizard.h"
00042 #include "printstyle.h"
00043 #include "printprogress.h"
00044
00045
00046 #include "ds_appearance.h"
00047
00048 namespace KABPrinting {
00049
00050 const char* ConfigSectionName="DetailedPrintStyle";
00051 const char* UseKDEFonts="UseKDEFonts";
00052 const char* HeaderFont="HeaderFont";
00053 const char* HeaderFontSize="HeaderFontSize";
00054 const char* HeadlinesFont="HeadlineFont";
00055 const char* HeadlinesFontSize="HeadlineFontSize";
00056 const char* BodyFont="BodyFont";
00057 const char* BodyFontSize="BodyFontSize";
00058 const char* DetailsFont="DetailsFont";
00059 const char* DetailsFontSize="DetailsFontSize";
00060 const char* FixedFont="FixedFont";
00061 const char* FixedFontSize="FixedFontSize";
00062 const char* ColoredContactHeaders="UseColoredContactHeaders";
00063 const char* ContactHeaderForeColor="ContactHeaderForeColor";
00064 const char* ContactHeaderBGColor="ContactHeaderBGColor";
00065
00066
00067 DetailledPrintStyle::DetailledPrintStyle(PrintingWizard* parent,
00068 const char* name)
00069 : PrintStyle(parent, name),
00070 mPageAppearance(new AppearancePage(parent, "AppearancePage")),
00071 mEPntr(0),
00072 mPrintProgress(0)
00073 {
00074 KConfig *config;
00075 QFont font;
00076 bool kdeFonts;
00077 QFont standard=KGlobalSettings::generalFont();
00078 QFont fixed=KGlobalSettings::fixedFont();
00079
00080 setPreview( "detailed-style.png" );
00081
00082 addPage( mPageAppearance, i18n( "Detailed Print Style - Appearance" ) );
00083
00084
00085
00086 config=kapp->config();
00087 config->setGroup(ConfigSectionName);
00088
00089 kdeFonts=config->readBoolEntry(UseKDEFonts, true);
00090 mPageAppearance->cbStandardFonts->setChecked(kdeFonts);
00091
00092 font=config->readFontEntry(HeaderFont, &standard);
00093 mPageAppearance->kfcHeaderFont->setCurrentFont(font.family());
00094 mPageAppearance->kisbHeaderFontSize->setValue(font.pointSize());
00095 font=config->readFontEntry(HeadlinesFont, &standard);
00096 mPageAppearance->kfcHeadlineFont->setCurrentFont(font.family());
00097 mPageAppearance->kisbHeadlineFontSize->setValue(font.pointSize());
00098 font=config->readFontEntry(BodyFont, &standard);
00099 mPageAppearance->kfcBodyFont->setCurrentFont(font.family());
00100 mPageAppearance->kisbBodyFontSize->setValue(font.pointSize());
00101 font=config->readFontEntry(DetailsFont, &standard);
00102 mPageAppearance->kfcDetailsFont->setCurrentFont(font.family());
00103 mPageAppearance->kisbDetailsFontSize->setValue(font.pointSize());
00104 font=config->readFontEntry(FixedFont, &fixed);
00105 mPageAppearance->kfcFixedFont->setCurrentFont(font.family());
00106 mPageAppearance->kisbFixedFontSize->setValue(font.pointSize());
00107
00108 mPageAppearance->cbBackgroundColor
00109 ->setChecked(config->readBoolEntry(ColoredContactHeaders, true));
00110 mPageAppearance->kcbHeaderBGColor
00111 ->setColor(config->readColorEntry(ContactHeaderBGColor, &Qt::black));
00112 mPageAppearance->kcbHeaderTextColor
00113 ->setColor(config->readColorEntry(ContactHeaderForeColor, &Qt::white));
00114
00115 mPageAppearance->layout()->setMargin(KDialog::marginHint());
00116 mPageAppearance->layout()->setSpacing(KDialog::spacingHint());
00117
00118 }
00119
00120 DetailledPrintStyle::~DetailledPrintStyle()
00121 {
00122 if( mEPntr != 0 )
00123 delete mEPntr;
00124 mEPntr = 0;
00125 }
00126
00127 void DetailledPrintStyle::print( KABC::Addressee::List &contacts, PrintProgress *progress)
00128 {
00129 mPrintProgress=progress;
00130 progress->addMessage(i18n("Setting up fonts and colors"));
00131 progress->setProgress(0);
00132 bool useKDEFonts;
00133 KConfig *config;
00134 QFont font;
00135 QColor foreColor=Qt::black;
00136 QColor headerColor=Qt::white;
00137 bool useHeaderColor=true;
00138 QColor backColor=Qt::black;
00139 bool useBGColor;
00140
00141 QFont header=QFont("Helvetica", 12, QFont::Normal);
00142 QFont headlines=QFont("Helvetica", 12, QFont::Normal, true);
00143 QFont body=QFont("Helvetica", 12, QFont::Normal);
00144 QFont fixed=QFont("Courier", 12, QFont::Normal);
00145 QFont comment=QFont("Helvetica", 10, QFont::Normal);
00146
00147 config=kapp->config();
00148 config->setGroup(ConfigSectionName);
00149 useKDEFonts=mPageAppearance->cbStandardFonts->isChecked();
00150 config->writeEntry(UseKDEFonts, useKDEFonts);
00151
00152 useBGColor=mPageAppearance->cbBackgroundColor->isChecked();
00153 config->writeEntry(ColoredContactHeaders, useBGColor);
00154 if(useBGColor)
00155 {
00156 headerColor=mPageAppearance->kcbHeaderTextColor->color();
00157 backColor=mPageAppearance->kcbHeaderBGColor->color();
00158 config->writeEntry(ContactHeaderForeColor, headerColor);
00159 config->writeEntry(ContactHeaderBGColor, backColor);
00160 }
00161 if(mPageAppearance->cbStandardFonts->isChecked())
00162 {
00163 QFont standard=KGlobalSettings::generalFont();
00164 header=standard;
00165 headlines=standard;
00166 body=standard;
00167 fixed=KGlobalSettings::fixedFont();
00168 comment=standard;
00169 } else {
00170
00171
00172 header.setFamily(mPageAppearance->kfcHeaderFont->currentText());
00173 header.setPointSize(mPageAppearance->kisbHeaderFontSize->value());
00174 config->writeEntry(HeaderFont, header);
00175
00176 headlines.setFamily(mPageAppearance->kfcHeadlineFont->currentText());
00177 headlines.setPointSize(mPageAppearance->kisbHeadlineFontSize->value());
00178 config->writeEntry(HeadlinesFont, headlines);
00179
00180 body.setFamily(mPageAppearance->kfcBodyFont->currentText());
00181 body.setPointSize(mPageAppearance->kisbBodyFontSize->value());
00182 config->writeEntry(BodyFont, body);
00183
00184 comment.setFamily(mPageAppearance->kfcDetailsFont->currentText());
00185 comment.setPointSize(mPageAppearance->kisbDetailsFontSize->value());
00186 config->writeEntry(DetailsFont, comment);
00187
00188 fixed.setFamily(mPageAppearance->kfcFixedFont->currentText());
00189 fixed.setPointSize(mPageAppearance->kisbFixedFontSize->value());
00190 config->writeEntry(FixedFont, fixed);
00191 }
00192 kdDebug(5720) << "DetailledPrintStyle::print: printing using" << endl
00193 << " header: " << header.family() << "("
00194 << header.pointSize() << ")" << endl
00195 << " headline: " << headlines.family() << "("
00196 << headlines.pointSize() << ")" << endl
00197 << " body: " << body.family() << "("
00198 << body.pointSize() << ")" << endl
00199 << " fixed: " << fixed.family() << "("
00200 << fixed.pointSize() << ")" << endl
00201 << " comment: " << comment.family() << "("
00202 << comment.pointSize() << ")" << endl;
00203
00204 mEPntr = new KABEntryPainter;
00205 mEPntr->setForegroundColor( foreColor );
00206 mEPntr->setHeaderColor( headerColor );
00207 mEPntr->setBackgroundColor( backColor );
00208 mEPntr->setUseHeaderColor( useHeaderColor );
00209 mEPntr->setHeaderFont( header );
00210 mEPntr->setHeadLineFont( headlines );
00211 mEPntr->setBodyFont( body );
00212 mEPntr->setFixedFont( fixed );
00213 mEPntr->setCommentFont( comment );
00214
00215 KPrinter *printer=wizard()->printer();
00216 QPainter painter;
00217
00218 progress->addMessage(i18n("Setting up margins and spacing"));
00219 int marginTop=0,
00220 marginLeft=64,
00221 marginRight=0,
00222 marginBottom=0;
00223 register int left, top, width, height;
00224
00225 painter.begin(printer);
00226 printer->setFullPage(true);
00227 QPaintDeviceMetrics metrics(printer);
00228 kdDebug(5720) << "DetailledPrintStyle::print: printing on a "
00229 << metrics.width() << "x" << metrics.height()
00230 << " size area," << endl << " "
00231 << "margins are "
00232 << printer->margins().width() << " (left/right) and "
00233 << printer->margins().height() << " (top/bottom)." << endl;
00234 left=QMAX(printer->margins().width(), marginLeft);
00235 top=QMAX(printer->margins().height(), marginTop);
00236 width=metrics.width()-left
00237 -QMAX(printer->margins().width(), marginRight);
00238 height=metrics.height()-top
00239 -QMAX(printer->margins().height(), marginBottom);
00240
00241
00242 painter.setViewport(left, top, width, height);
00243 progress->addMessage(i18n("Printing"));
00244 printEntries(contacts, printer, &painter,
00245 QRect(0, 0, metrics.width(), metrics.height()));
00246 progress->addMessage(i18n("Done"));
00247 painter.end();
00248 config->sync();
00249 }
00250
00251 bool DetailledPrintStyle::printEntries( KABC::Addressee::List &contacts,
00252 KPrinter *printer,
00253 QPainter *painter,
00254 const QRect& window)
00255 {
00256 QRect brect;
00257 int ypos=0, count=0;
00258
00259
00260 KABC::Addressee::List::Iterator it;
00261 for ( it = contacts.begin(); it != contacts.end(); ++it )
00262 {
00263 if( !(*it).isEmpty())
00264 {
00265 kdDebug(5720) << "DetailledPrintStyle::printEntries: printing addressee "
00266 << (*it).realName() << endl;
00267
00268 if(!mEPntr->printAddressee((*it), window, painter, ypos, true, &brect))
00269 {
00270 printer->newPage();
00271
00272
00273 ypos=0;
00274 }
00275 mEPntr->printAddressee((*it), window, painter, ypos, false, &brect);
00276 ypos+=brect.height();
00277 } else {
00278 kdDebug(5720) << "DetailledPrintStyle::printEntries: strange, addressee "
00279 << "with UID " << (*it).uid() << " not available." << endl;
00280 }
00281
00282 mPrintProgress->setProgress((count++*100)/contacts.count());
00283 }
00284 mPrintProgress->setProgress(100);
00285 return true;
00286 }
00287
00288 DetailledPrintStyleFactory::DetailledPrintStyleFactory(
00289 PrintingWizard* parent,
00290 const char* name)
00291 : PrintStyleFactory(parent, name)
00292 {
00293 }
00294
00295
00296 PrintStyle *DetailledPrintStyleFactory::create()
00297 {
00298 return new DetailledPrintStyle( mParent, mName );
00299 }
00300
00301 QString DetailledPrintStyleFactory::description()
00302 {
00303 return i18n("Detailed Style");
00304 }
00305
00306 }
00307
00308 #include "detailledstyle.moc"