kdeprint Library API Documentation

kpmarginpage.cpp

00001 /* 00002 * This file is part of the KDE libraries 00003 * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be> 00004 * 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Library General Public 00008 * License version 2 as published by the Free Software Foundation. 00009 * 00010 * This library 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 GNU 00013 * Library General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU Library General Public License 00016 * along with this library; see the file COPYING.LIB. If not, write to 00017 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00018 * Boston, MA 02111-1307, USA. 00019 **/ 00020 00021 #include <config.h> 00022 00023 #include "kpmarginpage.h" 00024 #include "kprinter.h" 00025 #include "driver.h" 00026 #include "marginwidget.h" 00027 00028 #include <qgroupbox.h> 00029 #include <qlayout.h> 00030 #include <qprinter.h> 00031 #include <qpaintdevicemetrics.h> 00032 00033 #include <kiconloader.h> 00034 #include <klocale.h> 00035 #include <kdebug.h> 00036 #include <kglobal.h> 00037 00038 KPMarginPage::KPMarginPage(KPrinter *prt, DrMain *driver, QWidget *parent, const char *name) 00039 : KPrintDialogPage(0, driver, parent, name) 00040 { 00041 m_printer = prt; 00042 setTitle(i18n("Margins")); 00043 m_usedriver = true; 00044 00045 QGroupBox *box = new QGroupBox(1, Qt::Vertical, i18n("Margins"), this); 00046 m_margin = new MarginWidget(box, "MarginWidget", (m_printer != 0)); 00047 //m_margin->setSymetricMargins(true); 00048 //if (m_printer) 00049 // m_margin->setResolution(m_printer->resolution()); 00050 00051 QVBoxLayout *l0 = new QVBoxLayout(this, 0, 10); 00052 l0->addWidget(box); 00053 l0->addStretch(1); 00054 } 00055 00056 KPMarginPage::~KPMarginPage() 00057 { 00058 } 00059 00060 void KPMarginPage::initPageSize(const QString& ps, bool landscape) 00061 { 00062 float w( -1 ), h( -1 ); 00063 float mt( 36 ), mb( mt ), ml( 24 ), mr( ml ); 00064 QString m_currentps(ps); 00065 if (driver() && m_usedriver ) 00066 { 00067 if (m_currentps.isEmpty()) 00068 { 00069 DrListOption *o = (DrListOption*)driver()->findOption("PageSize"); 00070 if (o) 00071 m_currentps = o->get("default"); 00072 } 00073 if (!m_currentps.isEmpty()) 00074 { 00075 DrPageSize *ps = driver()->findPageSize(m_currentps); 00076 if (ps) 00077 { 00078 w = ps->pageWidth(); 00079 h = ps->pageHeight(); 00080 mt = ps->topMargin(); 00081 ml = ps->leftMargin(); 00082 mb = ps->bottomMargin(); 00083 mr = ps->rightMargin(); 00084 } 00085 } 00086 } 00087 else 00088 { 00089 // no driver, use the Qt values for page size and margins 00090 QPrinter prt(QPrinter::PrinterResolution); 00091 prt.setFullPage(true); 00092 prt.setPageSize((QPrinter::PageSize)(m_currentps.isEmpty() ? KGlobal::locale()->pageSize() : ps.toInt())); 00093 QPaintDeviceMetrics metrics(&prt); 00094 w = metrics.width(); 00095 h = metrics.height(); 00096 unsigned int it, il, ib, ir; 00097 prt.margins( &it, &il, &ib, &ir ); 00098 mt = it; 00099 ml = il; 00100 mb = ib; 00101 mr = ir; 00102 } 00103 m_margin->setPageSize(w, h); 00104 m_margin->setOrientation(landscape ? KPrinter::Landscape : KPrinter::Portrait); 00105 m_margin->setDefaultMargins( mt, mb, ml, mr ); 00106 m_margin->setCustomEnabled(false); 00107 } 00108 00109 void KPMarginPage::setOptions(const QMap<QString,QString>& opts) 00110 { 00111 QString orient = opts["orientation-requested"]; 00112 bool land = (orient.isEmpty()? opts["kde-orientation"] == "Landscape" : orient == "4" || orient == "5"); 00113 QString ps = opts[ "kde-printsize" ]; 00114 if ( ps.isEmpty() ) 00115 { 00116 m_usedriver = true; 00117 ps = opts[ "PageSize" ]; 00118 if (ps.isEmpty()) 00119 ps = opts["kde-pagesize"]; 00120 } 00121 else 00122 m_usedriver = false; 00123 initPageSize(ps, land); 00124 00125 bool marginset(false); 00126 QString value; 00127 if (!(value=opts["kde-margin-top"]).isEmpty() && value.toFloat() != m_margin->top()) 00128 { 00129 marginset = true; 00130 m_margin->setTop(value.toFloat()); 00131 } 00132 if (!(value=opts["kde-margin-left"]).isEmpty() && value.toFloat() != m_margin->left()) 00133 { 00134 marginset = true; 00135 m_margin->setLeft(value.toFloat()); 00136 } 00137 if (!(value=opts["kde-margin-bottom"]).isEmpty() && value.toFloat() != m_margin->bottom()) 00138 { 00139 marginset = true; 00140 m_margin->setBottom(value.toFloat()); 00141 } 00142 if (!(value=opts["kde-margin-right"]).isEmpty() && value.toFloat() != m_margin->right()) 00143 { 00144 marginset = true; 00145 m_margin->setRight(value.toFloat()); 00146 } 00147 m_margin->setCustomEnabled(marginset); 00148 } 00149 00150 void KPMarginPage::getOptions(QMap<QString,QString>& opts, bool /* incldef */) 00151 { 00152 if (m_margin->isCustomEnabled() /*|| incldef*/) 00153 { 00154 opts["kde-margin-top"] = QString::number(m_margin->top()); 00155 opts["kde-margin-left"] = QString::number(m_margin->left()); 00156 opts["kde-margin-bottom"] = QString::number(m_margin->bottom()); 00157 opts["kde-margin-right"] = QString::number(m_margin->right()); 00158 } 00159 else 00160 { 00161 opts.remove("kde-margin-top"); 00162 opts.remove("kde-margin-left"); 00163 opts.remove("kde-margin-bottom"); 00164 opts.remove("kde-margin-right"); 00165 } 00166 }
KDE Logo
This file is part of the documentation for kdeprint Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun Oct 10 18:55:55 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003