kdeprint Library API Documentation

marginwidget.cpp

00001 /* 00002 * This file is part of the KDE libraries 00003 * Copyright (c) 2001-2002 Michael Goffioul <kdeprint@swing.be> 00004 * 00005 * This library is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU Library General Public 00007 * License version 2 as published by the Free Software Foundation. 00008 * 00009 * This library is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 * Library General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU Library General Public License 00015 * along with this library; see the file COPYING.LIB. If not, write to 00016 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00017 * Boston, MA 02111-1307, USA. 00018 **/ 00019 00020 #include "marginwidget.h" 00021 #include "marginpreview.h" 00022 #include "marginvaluewidget.h" 00023 #include "kprinter.h" 00024 00025 #include <qcombobox.h> 00026 #include <qcheckbox.h> 00027 #include <qlayout.h> 00028 #include <qlabel.h> 00029 #include <qwhatsthis.h> 00030 #include <klocale.h> 00031 #include <kglobal.h> 00032 00033 MarginWidget::MarginWidget(QWidget *parent, const char* name, bool allowMetricUnit) 00034 : QWidget(parent, name), m_default(4, 0), m_pagesize( 2 ) 00035 { 00036 //WhatsThis strings.... (added by pfeifle@kde.org) 00037 QString whatsThisTopMarginWidget = i18n( " <qt> " 00038 " <p><b>Top Margin</b></p>. " 00039 " <p>This spinbox/text edit field lets you control the top margin of your printout if the printing " 00040 " application does not define its margins internally. </p> " 00041 " <p>The setting works for instance for ASCII text file printing, or for printing from KMail and " 00042 " and Konqueror.. </p>" 00043 " <p><b>Note:</b></p>This margin setting is not intended for KOffice or OpenOffice.org printing, " 00044 " because these applications (or rather their users) are expected to do it by themselves. " 00045 " It also does not work for PostScript or PDF file, which in most cases have their margins hardcoded " 00046 " internally.</p> " 00047 " <br> " 00048 " <hr> " 00049 " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches " 00050 " with the CUPS commandline job option parameter:</em> " 00051 " <pre>" 00052 " -o page-top=... # use values from \"0\" or higher. \"72\" is equal to 1 inch. " 00053 " </pre>" 00054 " </p> " 00055 " </qt>" ); 00056 00057 QString whatsThisBottomMarginWidget = i18n( " <qt> " 00058 " <p><b>Bottom Margin</b></p>. " 00059 " <p>This spinbox/text edit field lets you control the bottom margin of your printout if the printing " 00060 " application does not define its margins internally. </p> " 00061 " <p>The setting works for instance for ASCII text file printing, or for printing from KMail and " 00062 " and Konqueror. </p>" 00063 " <p><b>Note:</b></p>This margin setting is not intended for KOffice or OpenOffice.org printing, " 00064 " because these applications (or rather their users) are expected to do it by themselves. " 00065 " It also does not work for PostScript or PDF file, which in most cases have their margins hardcoded " 00066 " internally.</p> " 00067 " <br> " 00068 " <hr> " 00069 " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches " 00070 " with the CUPS commandline job option parameter:</em> " 00071 " <pre>" 00072 " -o page-bottom=... # use values from \"0\" or higher. \"72\" is equal to 1 inch. " 00073 " </pre>" 00074 " </qt>" ); 00075 00076 QString whatsThisLeftMarginWidget = i18n( " <qt> " 00077 " <p><b>Left Margin</b></p>. " 00078 " <p>This spinbox/text edit field lets you control the left margin of your printout if the printing " 00079 " application does not define its margins internally. </p> " 00080 " <p>The setting works for instance for ASCII text file printing, or for printing from KMail and " 00081 " and Konqueror. </p>" 00082 " <p><b>Note:</b></p>This margin setting is not intended for KOffice or OpenOffice.org printing, " 00083 " because these applications (or rather their users) are expected to do it by themselves. " 00084 " It also does not work for PostScript or PDF file, which in most cases have their margins hardcoded " 00085 " internally.</p> " 00086 " <br> " 00087 " <hr> " 00088 " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches " 00089 " with the CUPS commandline job option parameter:</em> " 00090 " <pre>" 00091 " -o page-left=... # use values from \"0\" or higher. \"72\" is equal to 1 inch. " 00092 " </pre>" 00093 " </qt>" ); 00094 00095 QString whatsThisRightMarginWidget = i18n( " <qt> " 00096 " <p><b>Right Margin</b></p>. " 00097 " <p>This spinbox/text edit field lets you control the right margin of your printout if the printing " 00098 " application does not define its margins internally. </p> " 00099 " <p>The setting works for instance for ASCII text file printing, or for printing from KMail and " 00100 " and Konqueror. </p>" 00101 " <p><b>Note:</b></p>This margin setting is not intended for KOffice or OpenOffice.org printing, " 00102 " because these applications (or rather their users) are expected to do it by themselves. " 00103 " It also does not work for PostScript or PDF file, which in most cases have their margins hardcoded " 00104 " internally.</p> " 00105 " <br> " 00106 " <hr> " 00107 " <p><em><b>Additional hint for power users:</b> This KDEPrint GUI element matches " 00108 " with the CUPS commandline job option parameter:</em> " 00109 " <pre>" 00110 " -o page-right=... # use values from \"0\" or higher. \"72\" is equal to 1 inch. " 00111 " </pre>" 00112 " </qt>" ); 00113 00114 QString whatsThisMeasurementUnitMarginWidget = i18n( " <qt> " 00115 " <p><b>Change Measurement Unit<b></p>. " 00116 " <p>You can change the units of measurement for the page" 00117 " margins here. Select from Millimeter, Centimeter, Inch or Pixels (1 pixel == 1/72 inch). " 00118 " </p> " 00119 " </qt>" ); 00120 00121 QString whatsThisCheckboxMarginWidget = i18n( " <qt> " 00122 " <p><b>Custom Margins Checkbox</b></p>. " 00123 " <p>Enable this checkbox if you want to modify the margins of your printouts " 00124 " <p>You can change margin settings in 4 ways: " 00125 " <ul> " 00126 " <li>Edit the text fields. </li> " 00127 " <li>Click spinbox arrows. </li> " 00128 " <li>Scroll wheel of wheelmouses. </li> " 00129 " <li>Drag margins in preview frame with mouse. </li> " 00130 " </ul> " 00131 " <b>Note:</b> The margin setting does not work if you load such files directly into " 00132 " kprinter, which have their print margins hardcoded internally, like as most " 00133 " PDF or PostScript files. It works for all ASCII text files however. It also may not " 00134 " work with non-KDE applications which fail to " 00135 " fully utilize the KDEPrint framework, such as OpenOffice.org. </p> " 00136 " </qt>" ); 00137 00138 QString whatsThisDragAndPreviewMarginWidget = i18n( " <qt> " 00139 " <p><b>\"Drag-your-Margins\" </p>. " 00140 " <p>Use your mouse to drag and set each margin on this little preview window. </p> " 00141 " </qt>" ); 00142 00143 m_symetric = m_block = false; 00144 m_pagesize[ 0 ] = 595; 00145 m_pagesize[ 1 ] = 842; 00146 m_landscape = false; 00147 00148 m_custom = new QCheckBox(i18n("&Use custom margins"), this); 00149 QWhatsThis::add(m_custom, whatsThisCheckboxMarginWidget); 00150 m_top = new MarginValueWidget(0, 0.0, this); 00151 QWhatsThis::add(m_top, whatsThisTopMarginWidget); 00152 m_bottom = new MarginValueWidget(m_top, 0.0, this); 00153 QWhatsThis::add(m_bottom, whatsThisBottomMarginWidget); 00154 m_left = new MarginValueWidget(m_bottom, 0.0, this); 00155 QWhatsThis::add(m_left, whatsThisLeftMarginWidget); 00156 m_right = new MarginValueWidget(m_left, 0.0, this); 00157 QWhatsThis::add(m_right, whatsThisRightMarginWidget); 00158 m_top->setLabel(i18n("&Top:"), Qt::AlignLeft|Qt::AlignVCenter); 00159 m_bottom->setLabel(i18n("&Bottom:"), Qt::AlignLeft|Qt::AlignVCenter); 00160 m_left->setLabel(i18n("Le&ft:"), Qt::AlignLeft|Qt::AlignVCenter); 00161 m_right->setLabel(i18n("&Right:"), Qt::AlignLeft|Qt::AlignVCenter); 00162 m_units = new QComboBox(this); 00163 QWhatsThis::add(m_units, whatsThisMeasurementUnitMarginWidget); 00164 m_units->insertItem(i18n("Pixels (1/72nd in)")); 00165 if ( allowMetricUnit ) 00166 { 00167 m_units->insertItem(i18n("Inches (in)")); 00168 m_units->insertItem(i18n("Centimeters (cm)")); 00169 m_units->insertItem( i18n( "Millimeters (mm)" ) ); 00170 } 00171 m_units->setCurrentItem(0); 00172 connect(m_units, SIGNAL(activated(int)), m_top, SLOT(setMode(int))); 00173 connect(m_units, SIGNAL(activated(int)), m_bottom, SLOT(setMode(int))); 00174 connect(m_units, SIGNAL(activated(int)), m_left, SLOT(setMode(int))); 00175 connect(m_units, SIGNAL(activated(int)), m_right, SLOT(setMode(int))); 00176 m_preview = new MarginPreview(this); 00177 QWhatsThis::add(m_preview, whatsThisDragAndPreviewMarginWidget); 00178 m_preview->setMinimumSize(60, 80); 00179 m_preview->setPageSize(m_pagesize[ 0 ], m_pagesize[ 1 ]); 00180 connect(m_preview, SIGNAL(marginChanged(int,float)), SLOT(slotMarginPreviewChanged(int,float))); 00181 connect(m_top, SIGNAL(marginChanged(float)), SLOT(slotMarginValueChanged())); 00182 connect(m_bottom, SIGNAL(marginChanged(float)), SLOT(slotMarginValueChanged())); 00183 connect(m_left, SIGNAL(marginChanged(float)), SLOT(slotMarginValueChanged())); 00184 connect(m_right, SIGNAL(marginChanged(float)), SLOT(slotMarginValueChanged())); 00185 slotMarginValueChanged(); 00186 connect(m_custom, SIGNAL(toggled(bool)), m_top, SLOT(setEnabled(bool))); 00187 connect(m_custom, SIGNAL(toggled(bool)), m_left, SLOT(setEnabled(bool))); 00188 //connect(m_custom, SIGNAL(toggled(bool)), m_units, SLOT(setEnabled(bool))); 00189 connect(m_custom, SIGNAL(toggled(bool)), SLOT(slotCustomMarginsToggled(bool))); 00190 connect(m_custom, SIGNAL(toggled(bool)), m_preview, SLOT(enableRubberBand(bool))); 00191 m_top->setEnabled(false); 00192 m_bottom->setEnabled(false); 00193 m_left->setEnabled(false); 00194 m_right->setEnabled(false); 00195 //m_units->setEnabled(false); 00196 00197 QGridLayout *l3 = new QGridLayout(this, 7, 2, 0, 10); 00198 l3->addWidget(m_custom, 0, 0); 00199 l3->addWidget(m_top, 1, 0); 00200 l3->addWidget(m_bottom, 2, 0); 00201 l3->addWidget(m_left, 3, 0); 00202 l3->addWidget(m_right, 4, 0); 00203 l3->addRowSpacing(5, 10); 00204 l3->addWidget(m_units, 6, 0); 00205 l3->addMultiCellWidget(m_preview, 0, 6, 1, 1); 00206 00207 if ( allowMetricUnit ) 00208 { 00209 int mode = (KGlobal::locale()->measureSystem() == KLocale::Metric ? 2 : 1); 00210 m_top->setMode(mode); 00211 m_bottom->setMode(mode); 00212 m_left->setMode(mode); 00213 m_right->setMode(mode); 00214 m_units->setCurrentItem(mode); 00215 } 00216 } 00217 00218 MarginWidget::~MarginWidget() 00219 { 00220 } 00221 00222 void MarginWidget::slotCustomMarginsToggled(bool b) 00223 { 00224 m_bottom->setEnabled(b && !m_symetric); 00225 m_right->setEnabled(b && !m_symetric); 00226 if (!b) 00227 resetDefault(); 00228 } 00229 00230 void MarginWidget::setSymetricMargins(bool on) 00231 { 00232 if (on == m_symetric) 00233 return; 00234 00235 m_symetric = on; 00236 m_bottom->setEnabled(on && m_custom->isChecked()); 00237 m_right->setEnabled(on && m_custom->isChecked()); 00238 if (on) 00239 { 00240 connect(m_top, SIGNAL(marginChanged(float)), m_bottom, SLOT(setMargin(float))); 00241 connect(m_left, SIGNAL(marginChanged(float)), m_right, SLOT(setMargin(float))); 00242 m_bottom->setMargin(m_top->margin()); 00243 m_right->setMargin(m_left->margin()); 00244 } 00245 else 00246 { 00247 disconnect(m_top, 0, m_bottom, 0); 00248 disconnect(m_left, 0, m_right, 0); 00249 } 00250 m_preview->setSymetric(on); 00251 } 00252 00253 void MarginWidget::slotMarginValueChanged() 00254 { 00255 if (m_block) 00256 return; 00257 m_preview->setMargins(m_top->margin(), m_bottom->margin(), m_left->margin(), m_right->margin()); 00258 } 00259 00260 void MarginWidget::slotMarginPreviewChanged(int type, float value) 00261 { 00262 m_block = true; 00263 switch (type) 00264 { 00265 case MarginPreview::TMoving: 00266 m_top->setMargin(value); 00267 break; 00268 case MarginPreview::BMoving: 00269 m_bottom->setMargin(value); 00270 break; 00271 case MarginPreview::LMoving: 00272 m_left->setMargin(value); 00273 break; 00274 case MarginPreview::RMoving: 00275 m_right->setMargin(value); 00276 break; 00277 } 00278 m_block = false; 00279 } 00280 00281 void MarginWidget::setPageSize(float w, float h) 00282 { 00283 // takes care of the orientation and the resolution 00284 int dpi = m_top->resolution(); 00285 m_pagesize[ 0 ] = w; 00286 m_pagesize[ 1 ] = h; 00287 if (m_landscape) 00288 m_preview->setPageSize((m_pagesize[ 1 ]*dpi)/72, (m_pagesize[ 0 ]*dpi)/72); 00289 else 00290 m_preview->setPageSize((m_pagesize[ 0 ]*dpi)/72, (m_pagesize[ 1 ]*dpi)/72); 00291 } 00292 00293 float MarginWidget::top() const 00294 { 00295 return m_top->margin(); 00296 } 00297 00298 float MarginWidget::bottom() const 00299 { 00300 return m_bottom->margin(); 00301 } 00302 00303 float MarginWidget::left() const 00304 { 00305 return m_left->margin(); 00306 } 00307 00308 float MarginWidget::right() const 00309 { 00310 return m_right->margin(); 00311 } 00312 00313 void MarginWidget::setTop(float value) 00314 { 00315 m_top->setMargin(value); 00316 } 00317 00318 void MarginWidget::setBottom(float value) 00319 { 00320 m_bottom->setMargin(value); 00321 } 00322 00323 void MarginWidget::setLeft(float value) 00324 { 00325 m_left->setMargin(value); 00326 } 00327 00328 void MarginWidget::setRight(float value) 00329 { 00330 m_right->setMargin(value); 00331 } 00332 00333 void MarginWidget::setResolution(int dpi) 00334 { 00335 m_top->setResolution(dpi); 00336 m_bottom->setResolution(dpi); 00337 m_left->setResolution(dpi); 00338 m_right->setResolution(dpi); 00339 } 00340 00341 void MarginWidget::setDefaultMargins(float t, float b, float l, float r) 00342 { 00343 int dpi = m_top->resolution(); 00344 m_default[0] = (t*dpi)/72; 00345 m_default[1] = (b*dpi)/72; 00346 m_default[2] = (l*dpi)/72; 00347 m_default[3] = (r*dpi)/72; 00348 if (!m_custom->isChecked()) 00349 resetDefault(); 00350 } 00351 00352 void MarginWidget::resetDefault() 00353 { 00354 m_top->setMargin(m_landscape ? m_default[2] : m_default[0]); 00355 m_bottom->setMargin(m_landscape ? m_default[3] : m_default[1]); 00356 m_left->setMargin(m_landscape ? m_default[1] : m_default[2]); 00357 m_right->setMargin(m_landscape ? m_default[0] : m_default[3]); 00358 } 00359 00360 void MarginWidget::setCustomEnabled(bool on) 00361 { 00362 m_custom->setChecked(on); 00363 } 00364 00365 bool MarginWidget::isCustomEnabled() const 00366 { 00367 return m_custom->isChecked(); 00368 } 00369 00370 void MarginWidget::setOrientation(int orient) 00371 { 00372 m_landscape = (orient == KPrinter::Landscape); 00373 setPageSize(m_pagesize[ 0 ], m_pagesize[ 1 ]); 00374 } 00375 00376 #include "marginwidget.moc"
KDE Logo
This file is part of the documentation for kdeprint Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Apr 12 23:26:40 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003