From ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 Mon Sep 17 00:00:00 2001
From: toma
Date: Wed, 25 Nov 2009 17:56:58 +0000
Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
---
kdeprint/cups/kpimagepage.cpp | 503 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 503 insertions(+)
create mode 100644 kdeprint/cups/kpimagepage.cpp
(limited to 'kdeprint/cups/kpimagepage.cpp')
diff --git a/kdeprint/cups/kpimagepage.cpp b/kdeprint/cups/kpimagepage.cpp
new file mode 100644
index 000000000..9ebdc9548
--- /dev/null
+++ b/kdeprint/cups/kpimagepage.cpp
@@ -0,0 +1,503 @@
+/*
+ * This file is part of the KDE libraries
+ * Copyright (c) 2001 Michael Goffioul
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include "kpimagepage.h"
+#include "imageposition.h"
+#include "imagepreview.h"
+#include "driver.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+KPImagePage::KPImagePage(DrMain *driver, QWidget *parent, const char *name)
+: KPrintDialogPage(parent, name)
+{
+ //WhatsThis strings.... (added by pfeifle@kde.org)
+ QString whatsThisBrightnessImagePage = i18n( " "
+ " Brightness: Slider to control the brightness value of all colors used.
"
+ " The brightness value can range from 0 to 200. Values greater than 100 will "
+ " lighten the print. Values less than 100 will darken the print.
"
+ "
"
+ "
"
+ " Additional hint for power users: This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter: "
+ "
"
+ " -o brightness=... # use range from \"0\" to \"200\" "
+ "
"
+ "
"
+ " " );
+
+ QString whatsThisHueImagePage = i18n( " "
+ " Hue (Tint): Slider to control the hue value for color rotation.
"
+ " The hue value is a number from -360 to 360 and represents the color hue rotation. "
+ " The following table summarizes the change you will see for the base colors: "
+ "
"
+ " "
+ " Original | hue=-45 | hue=45 |
"
+ " Red | Purple | Yellow-orange |
"
+ " Green | Yellow-green | Blue-green |
"
+ " Yellow | Orange | Green-yellow |
"
+ " Blue | Sky-blue | Purple |
"
+ " Magenta | Indigo | Crimson |
"
+ " Cyan | Blue-green | Light-navy-blue |
"
+ "
"
+ " "
+ "
"
+ "
"
+ " Additional hint for power users: This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter: "
+ "
"
+ " -o hue=... # use range from \"-360\" to \"360\" "
+ "
"
+ " "
+ " " );
+
+ QString whatsThisSaturationImagePage = i18n( " "
+ " Saturation: Slider to control the saturation value for all colors used.
"
+ " The saturation value adjusts the saturation of the colors in an image, similar to "
+ " the color knob on your television. The color saturation value.can range from 0 to 200."
+ " On inkjet printers, a higher saturation value uses more ink. On laserjet printers, a "
+ " higher saturation uses more toner. "
+ " A color saturation of 0 produces a black-and-white print, while a value of 200 will "
+ " make the colors extremely intense.
"
+ "
"
+ "
"
+ " Additional hint for power users: This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter: "
+ "
"
+ " -o saturation=... # use range from \"0\" to \"200\" "
+ "
"
+ " "
+ " " );
+
+ QString whatsThisGammaImagePage = i18n( " "
+ " Gamma: Slider to control the gamma value for color correction.
"
+ " The gamma value can range from 1 to 3000. "
+ " A gamma values greater than 1000 lightens the print. A gamma value less than 1000 "
+ " darken the print. The default gamma is 1000.
"
+ " Note:
the gamma value adjustment is not visible in the thumbnail "
+ " preview. "
+ "
"
+ "
"
+ " Additional hint for power users: This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter: "
+ "
"
+ " -o gamma=... # use range from \"1\" to \"3000\" "
+ "
"
+ " "
+ " " );
+
+ QString whatsThisImagePage = i18n( " "
+ " Image Printing Options
"
+ " All options controlled on this page only apply to printing images. "
+ " Most image file formats are supported. To name a few: JPEG, TIFF, PNG, GIF, "
+ " PNM (PBM/PGM/PNM/PPM), Sun Raster, SGI RGB, Windows BMP."
+ " Options to influence color output of image printouts are: "
+ "
"
+ " - Brightness
"
+ " - Hue
"
+ " - Saturation
"
+ " - Gamma
"
+ "
"
+ " For a more detailed explanation about Brightness, Hue, Saturation and Gamma settings, please "
+ " look at the 'WhatsThis' items provided for these controls. "
+ "
"
+ " "
+ " " );
+
+ QString whatsThisColorationPreviewImagePage = i18n( " "
+ " Coloration Preview Thumbnail
"
+ " The coloration preview thumbnail indicates change of image coloration by different settings. "
+ " Options to influence output are: "
+ "
"
+ " - Brightness
"
+ " - Hue (Tint)
"
+ " - Saturation
"
+ " - Gamma
"
+ "
"
+ " "
+ " For a more detailed explanation about Brightness, Hue, Saturation and Gamma settings, please "
+ " look at the 'WhatsThis' items provided for these controls. "
+ "
"
+ " " );
+
+ QString whatsThisSizeImagePage = i18n( " "
+ " Image Size: Dropdown menu to control the image size on the printed paper. Dropdown "
+ " works in conjunction with slider below. Dropdown options are:.
"
+ " "
+ " - Natural Image Size: Image prints in its natural image size. If it does not fit onto "
+ " one sheet, the printout will be spread across multiple sheets. Note, that the slider is disabled "
+ " when selecting 'natural image size' in the dropdown menu.
"
+ " - Resolution (ppi): The resolution value slider covers a number range from 1 to 1200. "
+ " It specifies the resolution of the image in Pixels Per Inch (PPI). An image that is 3000x2400 pixels "
+ " will print 10x8 inches at 300 pixels per inch, for example, but 5x4 inches at 600 pixels per inch."
+ " If the specified resolution makes the image larger than the page, multiple pages will be printed. "
+ " Resolution defaults to 72 ppi. "
+ "
"
+ " - % of Page Size: The percent value slider covers numbers from 1 to 800. It specifies the size "
+ " in relation to the page (not the image). A scaling of 100 percent will fill the page as completely "
+ " as the image aspect ratio allows (doing auto-rotation of the image as needed). "
+ " A scaling of more than 100 will print the image across multiple "
+ " sheets. A scaling of 200 percent will print on up to 4 pages.
"
+ " Scaling in % of page size defaults to 100 %. "
+ " - % of Natural Image Size: The percent value slider moves from 1 to 800. It specifies "
+ " the printout size in relation "
+ " to the natural image size. A scaling of 100 percent will print the image at its natural size, while a "
+ " scaling of 50 percent will print the image at half its natural size. If the specified scaling makes "
+ " the image larger than the page, multiple pages will be printed. "
+ " Scaling in % of natural image size defaults to 100 %. "
+ "
"
+ "
"
+ "
"
+ " Additional hint for power users: This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter: "
+ "
"
+ " -o natural-scaling=... # range in % is 1....800 "
+ "
"
+ " -o scaling=... # range in % is 1....800 "
+ "
"
+ " -o ppi=... # range in ppi is 1...1200 "
+ "
"
+ " "
+ " " );
+
+ QString whatsThisPreviewPositionImagePage = i18n( " "
+ " Position Preview Thumbnail
"
+ " This position preview thumbnail indicates the position of the image on the paper sheet. "
+ "
Click on horizontal and vertical radio buttons to move image alignment on paper around. Options are: "
+ "
"
+ " - center
"
+ " - top
"
+ " - top-left
"
+ " - left
"
+ " - bottom-left
"
+ " - bottom
"
+ " - bottom-right
"
+ " - right
"
+ " - top-right
"
+ "
"
+ " "
+ " " );
+
+ QString whatsThisResetButtonImagePage = i18n( " "
+ " Reset to Default Values
"
+ " Reset all coloration settings to default values. Default values are: "
+ "
"
+ " - Brightness: 100
"
+ " - Hue (Tint). 0
"
+ " - Saturation: 100
"
+ " - Gamma: 1000
"
+ "
"
+ " "
+ " " );
+
+ QString whatsThisPositionImagePage = i18n( " "
+ " Image Positioning:
"
+ " Select a pair of radiobuttons to "
+ " move image to the position you want on the paper printout. Default "
+ " is 'center'.
"
+ "
"
+ "
"
+ " Additional hint for power users: This KDEPrint GUI element matches "
+ " with the CUPS commandline job option parameter: "
+ "
"
+ " -o position=... # examples: \"top-left\" or \"bottom\" "
+ "
"
+ " "
+ " " );
+
+ setTitle(i18n("Image"));
+
+ QGroupBox *colorbox = new QGroupBox(0, Qt::Vertical, i18n("Color Settings"), this);
+ QWhatsThis::add(this, whatsThisImagePage);
+ QGroupBox *sizebox = new QGroupBox(0, Qt::Vertical, i18n("Image Size"), this);
+ QWhatsThis::add(sizebox, whatsThisSizeImagePage);
+ QGroupBox *positionbox = new QGroupBox(0, Qt::Vertical, i18n("Image Position"), this);
+ QWhatsThis::add(positionbox, whatsThisPositionImagePage);
+
+ m_brightness = new KIntNumInput(100, colorbox);
+ m_brightness->setLabel(i18n("&Brightness:"));
+ m_brightness->setRange(0, 200, 20, true);
+ QWhatsThis::add(m_brightness, whatsThisBrightnessImagePage);
+
+ m_hue = new KIntNumInput(m_brightness, 0, colorbox);
+ m_hue->setLabel(i18n("&Hue (Color rotation):"));
+ m_hue->setRange(-360, 360, 36, true);
+ QWhatsThis::add(m_hue, whatsThisHueImagePage);
+
+ m_saturation = new KIntNumInput(m_brightness, 100, colorbox);
+ m_saturation->setLabel(i18n("&Saturation:"));
+ m_saturation->setRange(0, 200, 20, true);
+ QWhatsThis::add(m_saturation, whatsThisSaturationImagePage);
+
+ m_gamma = new KIntNumInput(m_saturation, 1000, colorbox);
+ m_gamma->setLabel(i18n("&Gamma (Color correction):"));
+ m_gamma->setRange(1, 3000, 100, true);
+ QWhatsThis::add(m_gamma, whatsThisGammaImagePage);
+
+ connect(m_brightness, SIGNAL(valueChanged(int)), SLOT(slotImageSettingsChanged()));
+ connect(m_hue, SIGNAL(valueChanged(int)), SLOT(slotImageSettingsChanged()));
+ connect(m_saturation, SIGNAL(valueChanged(int)), SLOT(slotImageSettingsChanged()));
+ //connect(m_gamma, SIGNAL(valueChanged(int)), SLOT(slotImageSettingsChanged()));
+
+ m_preview = new ImagePreview(colorbox);
+ bool useColor = (driver ? driver->get("colordevice") == "1" : true);
+ m_preview->setBlackAndWhite(!useColor);
+ QWhatsThis::add(m_preview, whatsThisColorationPreviewImagePage);
+
+ m_hue->setEnabled(useColor);
+ m_saturation->setEnabled(useColor);
+ QImage img(locate("data", "kdeprint/preview.png"));
+ m_preview->setImage(img);
+
+ KSeparator *sep = new KSeparator(Qt::Horizontal, colorbox);
+
+ QPushButton *defbtn = new QPushButton(i18n("&Default Settings"), colorbox);
+ QWhatsThis::add(defbtn, whatsThisResetButtonImagePage);
+ connect(defbtn, SIGNAL(clicked()), SLOT(slotDefaultClicked()));
+ slotDefaultClicked();
+
+ m_sizetype = new QComboBox(sizebox);
+ m_sizetype->insertItem(i18n("Natural Image Size"));
+ m_sizetype->insertItem(i18n("Resolution (ppi)"));
+ // xgettext:no-c-format
+ m_sizetype->insertItem(i18n("% of Page"));
+ // xgettext:no-c-format
+ m_sizetype->insertItem(i18n("% of Natural Image Size"));
+
+ m_size = new KIntNumInput(sizebox);
+ m_size->setRange(1, 1200, 20, true);
+ m_size->setValue(72);
+
+ connect(m_sizetype, SIGNAL(activated(int)), SLOT(slotSizeTypeChanged(int)));
+ m_sizetype->setCurrentItem(0);
+ slotSizeTypeChanged(0);
+
+ QLabel *lab = new QLabel(i18n("&Image size type:"), sizebox);
+ lab->setBuddy(m_sizetype);
+
+ m_position = new ImagePosition(positionbox);
+ QWhatsThis::add(m_position, whatsThisPreviewPositionImagePage);
+
+ QRadioButton *bottom = new QRadioButton(positionbox);
+ QRadioButton *top = new QRadioButton(positionbox);
+ QRadioButton *vcenter = new QRadioButton(positionbox);
+ QRadioButton *left = new QRadioButton(positionbox);
+ QRadioButton *right = new QRadioButton(positionbox);
+ QRadioButton *hcenter = new QRadioButton(positionbox);
+ QSize sz = bottom->sizeHint();
+ bottom->setFixedSize(sz);
+ vcenter->setFixedSize(sz);
+ top->setFixedSize(sz);
+ left->setFixedSize(sz);
+ hcenter->setFixedSize(sz);
+ right->setFixedSize(sz);
+
+ m_vertgrp = new QButtonGroup(positionbox);
+ m_vertgrp->hide();
+
+ m_horizgrp = new QButtonGroup(positionbox);
+ m_horizgrp->hide();
+
+ m_vertgrp->insert(top, 0);
+ m_vertgrp->insert(vcenter, 1);
+ m_vertgrp->insert(bottom, 2);
+ if ( QApplication::reverseLayout() )
+ {
+ m_horizgrp->insert(left, 2);
+ m_horizgrp->insert(hcenter, 1);
+ m_horizgrp->insert(right, 0);
+ }
+ else
+ {
+ m_horizgrp->insert(left, 0);
+ m_horizgrp->insert(hcenter, 1);
+ m_horizgrp->insert(right, 2);
+ }
+ connect(m_vertgrp, SIGNAL(clicked(int)), SLOT(slotPositionChanged()));
+ connect(m_horizgrp, SIGNAL(clicked(int)), SLOT(slotPositionChanged()));
+ m_vertgrp->setButton(1);
+ m_horizgrp->setButton(1);
+ slotPositionChanged();
+
+ QGridLayout *l0 = new QGridLayout(this, 2, 2, 0, 10);
+ l0->addMultiCellWidget(colorbox, 0, 0, 0, 1);
+ l0->addWidget(sizebox, 1, 0);
+ l0->addWidget(positionbox, 1, 1);
+ l0->setColStretch(0, 1);
+ QGridLayout *l1 = new QGridLayout(colorbox->layout(), 5, 2, 10);
+ l1->addWidget(m_brightness, 0, 0);
+ l1->addWidget(m_hue, 1, 0);
+ l1->addWidget(m_saturation, 2, 0);
+ l1->addWidget(sep, 3, 0);
+ l1->addWidget(m_gamma, 4, 0);
+ l1->addMultiCellWidget(m_preview, 0, 3, 1, 1);
+ l1->addWidget(defbtn, 4, 1);
+ QVBoxLayout *l2 = new QVBoxLayout(sizebox->layout(), 3);
+ l2->addStretch(1);
+ l2->addWidget(lab);
+ l2->addWidget(m_sizetype);
+ l2->addSpacing(10);
+ l2->addWidget(m_size);
+ l2->addStretch(1);
+ QGridLayout *l3 = new QGridLayout(positionbox->layout(), 2, 2, 10);
+ QHBoxLayout *l4 = new QHBoxLayout(0, 0, 10);
+ QVBoxLayout *l5 = new QVBoxLayout(0, 0, 10);
+ l3->addLayout(l4, 0, 1);
+ l3->addLayout(l5, 1, 0);
+ l3->addWidget(m_position, 1, 1);
+ l4->addWidget(left, Qt::AlignLeft);
+ l4->addWidget(hcenter, Qt::AlignCenter);
+ l4->addWidget(right, Qt::AlignRight);
+ l5->addWidget(top, Qt::AlignTop);
+ l5->addWidget(vcenter, Qt::AlignVCenter);
+ l5->addWidget(bottom, Qt::AlignBottom);
+}
+
+KPImagePage::~KPImagePage()
+{
+}
+
+void KPImagePage::setOptions(const QMap& opts)
+{
+ QString value;
+ if (!(value=opts["brightness"]).isEmpty())
+ m_brightness->setValue(value.toInt());
+ if (!(value=opts["hue"]).isEmpty())
+ m_hue->setValue(value.toInt());
+ if (!(value=opts["saturation"]).isEmpty())
+ m_saturation->setValue(value.toInt());
+ if (!(value=opts["gamma"]).isEmpty())
+ m_gamma->setValue(value.toInt());
+
+ int type = 0;
+ int ival(0);
+ if ((ival = opts["ppi"].toInt()) != 0)
+ type = 1;
+ else if ((ival = opts["scaling"].toInt()) != 0)
+ type = 2;
+ else if (!opts["natural-scaling"].isEmpty() && (ival = opts["natural-scaling"].toInt()) != 1)
+ type = 3;
+ m_sizetype->setCurrentItem(type);
+ slotSizeTypeChanged(type);
+ if (type != 0)
+ m_size->setValue(ival);
+
+ if (!(value=opts["position"]).isEmpty())
+ {
+ m_position->setPosition(value.latin1());
+ int pos = m_position->position();
+ m_vertgrp->setButton(pos/3);
+ m_horizgrp->setButton(pos%3);
+ }
+}
+
+void KPImagePage::getOptions(QMap& opts, bool incldef)
+{
+ if (incldef || m_brightness->value() != 100)
+ opts["brightness"] = QString::number(m_brightness->value());
+ if (m_hue->isEnabled())
+ {
+ if (incldef || m_hue->value() != 0)
+ opts["hue"] = QString::number(m_hue->value());
+ if (incldef || m_saturation->value() != 100)
+ opts["saturation"] = QString::number(m_saturation->value());
+ }
+ if (incldef || m_gamma->value() != 1000)
+ opts["gamma"] = QString::number(m_gamma->value());
+
+ QString name;
+ if (incldef)
+ {
+ opts["ppi"] = "0";
+ opts["scaling"] = "0";
+ opts["natural-scaling"] = "1";
+ }
+ switch (m_sizetype->currentItem())
+ {
+ case 0: break;
+ case 1: name = "ppi"; break;
+ case 2: name = "scaling"; break;
+ case 3: name = "natural-scaling"; break;
+ }
+ if (!name.isEmpty())
+ opts[name] = QString::number(m_size->value());
+
+ if (incldef || m_position->position() != ImagePosition::Center)
+ opts["position"] = m_position->positionString();
+}
+
+void KPImagePage::slotSizeTypeChanged(int t)
+{
+ m_size->setEnabled(t > 0);
+ if (t > 0)
+ {
+ int minval, maxval, defval;
+ if (t == 1)
+ {
+ minval = 1;
+ maxval = 1200;
+ defval = 72;
+ }
+ else
+ {
+ minval = 1;
+ maxval = 800;
+ defval = 100;
+ }
+ m_size->setRange(minval, maxval);
+ m_size->setValue(defval);
+ }
+}
+
+void KPImagePage::slotPositionChanged()
+{
+ int h = m_horizgrp->id(m_horizgrp->selected()), v = m_vertgrp->id(m_vertgrp->selected());
+ m_position->setPosition(h, v);
+}
+
+void KPImagePage::slotImageSettingsChanged()
+{
+ int b = m_brightness->value(), h = m_hue->value(), s = m_saturation->value();
+ //int g = m_gamma->value();
+ int g = 1000;
+ m_preview->setParameters(b, h, s, g);
+}
+
+void KPImagePage::slotDefaultClicked()
+{
+ m_brightness->setValue(100);
+ m_hue->setValue(0);
+ m_saturation->setValue(100);
+ m_gamma->setValue(1000);
+}
+
+#include "kpimagepage.moc"
--
cgit v1.2.3