00001
00002
00003
00004
00005
00006
00007 #include "DlgImportCroppingNonPdf.h"
00008 #include "EngaugeAssert.h"
00009 #include "Logger.h"
00010 #include "MainWindow.h"
00011 #include "NonPdfCropping.h"
00012 #include <QApplication>
00013 #include <QGraphicsPixmapItem>
00014 #include <QGraphicsScene>
00015 #include <QImage>
00016 #include <QLabel>
00017 #include <QLayout>
00018 #include <QPushButton>
00019 #include <QSettings>
00020 #include <QSpinBox>
00021 #include <QTimer>
00022 #include "Settings.h"
00023 #include "ViewPreview.h"
00024
00025 int DlgImportCroppingNonPdf::MINIMUM_DIALOG_WIDTH = 350;
00026 int DlgImportCroppingNonPdf::MINIMUM_PREVIEW_HEIGHT = 200;
00027
00028 DlgImportCroppingNonPdf::DlgImportCroppingNonPdf(const QString &fileName) :
00029 m_fileName (fileName),
00030 m_pixmap (0)
00031 {
00032 LOG4CPP_INFO_S ((*mainCat)) << "DlgImportCroppingNonPdf::DlgImportCroppingNonPdf";
00033
00034 setWindowTitle (tr ("Image File Import Cropping"));
00035 setModal (true);
00036
00037 QWidget *subPanel = new QWidget ();
00038 QGridLayout *layout = new QGridLayout (subPanel);
00039 subPanel->setLayout (layout);
00040
00041 int row = 0;
00042
00043 createPreview (layout, row);
00044 finishPanel (subPanel);
00045 updatePreview ();
00046
00047
00048 layout->setColumnStretch (0, 1);
00049 layout->setColumnStretch (1, 0);
00050 layout->setColumnStretch (2, 0);
00051 layout->setColumnStretch (3, 1);
00052 }
00053
00054 DlgImportCroppingNonPdf::~DlgImportCroppingNonPdf()
00055 {
00056 LOG4CPP_INFO_S ((*mainCat)) << "DlgImportCroppingNonPdf::~DlgImportCroppingNonPdf";
00057 }
00058
00059 void DlgImportCroppingNonPdf::createNonPdfCropping ()
00060 {
00061
00062 m_nonPdfCropping = new NonPdfCropping (*m_scenePreview,
00063 *m_viewPreview);
00064 }
00065
00066 void DlgImportCroppingNonPdf::createPreview (QGridLayout *layout,
00067 int &row)
00068 {
00069 LOG4CPP_INFO_S ((*mainCat)) << "DlgImportCroppingNonPdf::createPreview";
00070
00071 QLabel *labelPreview = new QLabel (tr ("Preview"));
00072 layout->addWidget (labelPreview, row++, 0, 1, 1, Qt::AlignLeft);
00073
00074 m_scenePreview = new QGraphicsScene (this);
00075 m_viewPreview = new ViewPreview (m_scenePreview,
00076 ViewPreview::VIEW_ASPECT_RATIO_ONE_TO_ONE,
00077 this);
00078 m_viewPreview->setWhatsThis (tr ("Preview window that shows what part of the image will be imported. "
00079 "The image portion inside the rectangular frame will be imported from the currently selected page. "
00080 "The frame can be moved and resized by dragging the corner handles."));
00081 m_viewPreview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
00082 m_viewPreview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
00083 m_viewPreview->setMinimumHeight (MINIMUM_PREVIEW_HEIGHT);
00084 layout->addWidget (m_viewPreview, row++, 0, 1, 4);
00085
00086
00087 initializeFrameGeometryAndPixmap ();
00088 createNonPdfCropping ();
00089 }
00090
00091 void DlgImportCroppingNonPdf::finishPanel (QWidget *subPanel)
00092 {
00093 const int STRETCH_OFF = 0, STRETCH_ON = 1;
00094
00095 QVBoxLayout *panelLayout = new QVBoxLayout (this);
00096
00097 setMinimumWidth (MINIMUM_DIALOG_WIDTH);
00098 setLayout (panelLayout);
00099
00100 panelLayout->addWidget (subPanel);
00101 panelLayout->setStretch (panelLayout->count () - 1, STRETCH_ON);
00102
00103 QWidget *panelButtons = new QWidget (this);
00104 QHBoxLayout *buttonLayout = new QHBoxLayout (panelButtons);
00105
00106 QHBoxLayout *layoutRightSide = new QHBoxLayout;
00107
00108 QWidget *widgetRightSide = new QWidget;
00109 widgetRightSide->setLayout (layoutRightSide);
00110 buttonLayout->addWidget (widgetRightSide);
00111
00112 QSpacerItem *spacerExpanding = new QSpacerItem (40, 5, QSizePolicy::Expanding, QSizePolicy::Expanding);
00113 layoutRightSide->addItem (spacerExpanding);
00114
00115 m_btnOk = new QPushButton (tr ("Ok"));
00116 layoutRightSide->addWidget (m_btnOk, 0, Qt::AlignRight);
00117 connect (m_btnOk, SIGNAL (released ()), this, SLOT (slotOk ()));
00118
00119 QSpacerItem *spacerFixed = new QSpacerItem (40, 5, QSizePolicy::Fixed, QSizePolicy::Fixed);
00120 layoutRightSide->addItem (spacerFixed);
00121
00122 m_btnCancel = new QPushButton (tr ("Cancel"));
00123 layoutRightSide->addWidget (m_btnCancel, 0, Qt::AlignRight);
00124 connect (m_btnCancel, SIGNAL (released ()), this, SLOT (slotCancel ()));
00125
00126 panelLayout->addWidget (panelButtons, STRETCH_ON);
00127 panelLayout->setStretch (panelLayout->count () - 1, STRETCH_OFF);
00128 }
00129
00130 QImage DlgImportCroppingNonPdf::image () const
00131 {
00132
00133
00134 ENGAUGE_ASSERT (m_nonPdfCropping != 0);
00135 QRectF rectFramePixels = m_nonPdfCropping->frameRect ();
00136
00137 return m_image.copy (rectFramePixels.toRect ());
00138 }
00139
00140 void DlgImportCroppingNonPdf::initializeFrameGeometryAndPixmap ()
00141 {
00142 m_image = loadImage ();
00143 QGraphicsPixmapItem *pixmap = new QGraphicsPixmapItem (QPixmap::fromImage (m_image));
00144 m_scenePreview->addItem (pixmap);
00145
00146
00147 m_viewPreview->setSceneRect (pixmap->boundingRect ());
00148 }
00149
00150 QImage DlgImportCroppingNonPdf::loadImage () const
00151 {
00152 QImage image;
00153 image.load (m_fileName);
00154
00155 return image;
00156 }
00157
00158 void DlgImportCroppingNonPdf::saveGeometryToSettings()
00159 {
00160
00161 QSettings settings;
00162 settings.beginGroup (SETTINGS_GROUP_IMPORT_CROPPING);
00163 settings.setValue (SETTINGS_IMPORT_CROPPING_POS, saveGeometry ());
00164 settings.endGroup();
00165 }
00166
00167 void DlgImportCroppingNonPdf::showEvent (QShowEvent * )
00168 {
00169 QSettings settings;
00170 settings.beginGroup (SETTINGS_GROUP_IMPORT_CROPPING);
00171 if (settings.contains (SETTINGS_IMPORT_CROPPING_POS)) {
00172
00173
00174 restoreGeometry (settings.value (SETTINGS_IMPORT_CROPPING_POS).toByteArray ());
00175 }
00176 }
00177
00178 void DlgImportCroppingNonPdf::slotCancel ()
00179 {
00180 LOG4CPP_INFO_S ((*mainCat)) << "DlgImportCroppingNonPdf::slotCancel";
00181
00182
00183 QApplication::restoreOverrideCursor ();
00184
00185 setResult (QDialog::Rejected);
00186 saveGeometryToSettings();
00187 hide();
00188 }
00189
00190 void DlgImportCroppingNonPdf::slotOk ()
00191 {
00192 LOG4CPP_INFO_S ((*mainCat)) << "DlgImportCroppingNonPdf::slotOk";
00193
00194
00195 QApplication::restoreOverrideCursor ();
00196
00197 setResult (QDialog::Accepted);
00198 saveGeometryToSettings();
00199 hide();
00200 }
00201
00202 void DlgImportCroppingNonPdf::updatePreview ()
00203 {
00204 LOG4CPP_INFO_S ((*mainCat)) << "DlgImportCroppingNonPdf::updatePreview";
00205
00206 if (m_pixmap != 0) {
00207 m_scenePreview->removeItem (m_pixmap);
00208 }
00209
00210 m_image = loadImage ();
00211 m_pixmap = new QGraphicsPixmapItem (QPixmap::fromImage (m_image));
00212 m_scenePreview->addItem (m_pixmap);
00213
00214
00215 QApplication::restoreOverrideCursor ();
00216 }