7 #include "DlgImportCroppingNonPdf.h" 8 #include "EngaugeAssert.h" 10 #include "MainWindow.h" 11 #include "NonPdfCropping.h" 12 #include <QApplication> 13 #include <QGraphicsPixmapItem> 14 #include <QGraphicsScene> 18 #include <QPushButton> 23 #include "ViewPreview.h" 25 int DlgImportCroppingNonPdf::MINIMUM_DIALOG_WIDTH = 350;
26 int DlgImportCroppingNonPdf::MINIMUM_PREVIEW_HEIGHT = 200;
29 m_fileName (fileName),
32 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgImportCroppingNonPdf::DlgImportCroppingNonPdf";
34 setWindowTitle (tr (
"Image File Import Cropping"));
37 QWidget *subPanel =
new QWidget ();
38 QGridLayout *layout =
new QGridLayout (subPanel);
39 subPanel->setLayout (layout);
43 createPreview (layout, row);
44 finishPanel (subPanel);
48 layout->setColumnStretch (0, 1);
49 layout->setColumnStretch (1, 0);
50 layout->setColumnStretch (2, 0);
51 layout->setColumnStretch (3, 1);
54 DlgImportCroppingNonPdf::~DlgImportCroppingNonPdf()
56 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgImportCroppingNonPdf::~DlgImportCroppingNonPdf";
59 void DlgImportCroppingNonPdf::createNonPdfCropping ()
66 void DlgImportCroppingNonPdf::createPreview (QGridLayout *layout,
69 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgImportCroppingNonPdf::createPreview";
71 QLabel *labelPreview =
new QLabel (tr (
"Preview"));
72 layout->addWidget (labelPreview, row++, 0, 1, 1, Qt::AlignLeft);
74 m_scenePreview =
new QGraphicsScene (
this);
76 ViewPreview::VIEW_ASPECT_RATIO_ONE_TO_ONE,
78 m_viewPreview->setWhatsThis (tr (
"Preview window that shows what part of the image will be imported. " 79 "The image portion inside the rectangular frame will be imported from the currently selected page. " 80 "The frame can be moved and resized by dragging the corner handles."));
81 m_viewPreview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
82 m_viewPreview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
83 m_viewPreview->setMinimumHeight (MINIMUM_PREVIEW_HEIGHT);
84 layout->addWidget (m_viewPreview, row++, 0, 1, 4);
87 initializeFrameGeometryAndPixmap ();
88 createNonPdfCropping ();
91 void DlgImportCroppingNonPdf::finishPanel (QWidget *subPanel)
93 const int STRETCH_OFF = 0, STRETCH_ON = 1;
95 QVBoxLayout *panelLayout =
new QVBoxLayout (
this);
97 setMinimumWidth (MINIMUM_DIALOG_WIDTH);
98 setLayout (panelLayout);
100 panelLayout->addWidget (subPanel);
101 panelLayout->setStretch (panelLayout->count () - 1, STRETCH_ON);
103 QWidget *panelButtons =
new QWidget (
this);
104 QHBoxLayout *buttonLayout =
new QHBoxLayout (panelButtons);
106 QHBoxLayout *layoutRightSide =
new QHBoxLayout;
108 QWidget *widgetRightSide =
new QWidget;
109 widgetRightSide->setLayout (layoutRightSide);
110 buttonLayout->addWidget (widgetRightSide);
112 QSpacerItem *spacerExpanding =
new QSpacerItem (40, 5, QSizePolicy::Expanding, QSizePolicy::Expanding);
113 layoutRightSide->addItem (spacerExpanding);
115 m_btnOk =
new QPushButton (tr (
"Ok"));
116 layoutRightSide->addWidget (m_btnOk, 0, Qt::AlignRight);
117 connect (m_btnOk, SIGNAL (released ()),
this, SLOT (slotOk ()));
119 QSpacerItem *spacerFixed =
new QSpacerItem (40, 5, QSizePolicy::Fixed, QSizePolicy::Fixed);
120 layoutRightSide->addItem (spacerFixed);
122 m_btnCancel =
new QPushButton (tr (
"Cancel"));
123 layoutRightSide->addWidget (m_btnCancel, 0, Qt::AlignRight);
124 connect (m_btnCancel, SIGNAL (released ()),
this, SLOT (slotCancel ()));
126 panelLayout->addWidget (panelButtons, STRETCH_ON);
127 panelLayout->setStretch (panelLayout->count () - 1, STRETCH_OFF);
134 ENGAUGE_ASSERT (m_nonPdfCropping != 0);
135 QRectF rectFramePixels = m_nonPdfCropping->
frameRect ();
137 return m_image.copy (rectFramePixels.toRect ());
140 void DlgImportCroppingNonPdf::initializeFrameGeometryAndPixmap ()
142 m_image = loadImage ();
143 QGraphicsPixmapItem *pixmap =
new QGraphicsPixmapItem (QPixmap::fromImage (m_image));
144 m_scenePreview->addItem (pixmap);
147 m_viewPreview->setSceneRect (pixmap->boundingRect ());
150 QImage DlgImportCroppingNonPdf::loadImage ()
const 153 image.load (m_fileName);
158 void DlgImportCroppingNonPdf::saveGeometryToSettings()
162 settings.beginGroup (SETTINGS_GROUP_IMPORT_CROPPING);
163 settings.setValue (SETTINGS_IMPORT_CROPPING_POS, saveGeometry ());
170 settings.beginGroup (SETTINGS_GROUP_IMPORT_CROPPING);
171 if (settings.contains (SETTINGS_IMPORT_CROPPING_POS)) {
174 restoreGeometry (settings.value (SETTINGS_IMPORT_CROPPING_POS).toByteArray ());
178 void DlgImportCroppingNonPdf::slotCancel ()
180 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgImportCroppingNonPdf::slotCancel";
183 QApplication::restoreOverrideCursor ();
185 setResult (QDialog::Rejected);
186 saveGeometryToSettings();
190 void DlgImportCroppingNonPdf::slotOk ()
192 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgImportCroppingNonPdf::slotOk";
195 QApplication::restoreOverrideCursor ();
197 setResult (QDialog::Accepted);
198 saveGeometryToSettings();
202 void DlgImportCroppingNonPdf::updatePreview ()
204 LOG4CPP_INFO_S ((*mainCat)) <<
"DlgImportCroppingNonPdf::updatePreview";
207 m_scenePreview->removeItem (m_pixmap);
210 m_image = loadImage ();
211 m_pixmap =
new QGraphicsPixmapItem (QPixmap::fromImage (m_image));
212 m_scenePreview->addItem (m_pixmap);
215 QApplication::restoreOverrideCursor ();
This class shows a frame around the selected portion of the import preview window.
QRectF frameRect() const
Frame rectangle selected by user.
Class that modifies QGraphicsView to automatically expand/shrink the view to fit the window...
DlgImportCroppingNonPdf(const QString &fileName)
Single constructor.
virtual void showEvent(QShowEvent *event)
Do preparation before dialog is displayed.
QImage image() const
Image that was selected. Value is null if loading failed.