[QGIS Commit] r14761 - in trunk/qgis/src: app/composer gui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Thu Nov 25 02:47:24 EST 2010
Author: mhugent
Date: 2010-11-24 23:47:24 -0800 (Wed, 24 Nov 2010)
New Revision: 14761
Modified:
trunk/qgis/src/app/composer/qgscomposer.cpp
trunk/qgis/src/gui/qgscomposerview.cpp
trunk/qgis/src/gui/qgscomposerview.h
Log:
Fix for paint event problems in case of multiple composer maps
Modified: trunk/qgis/src/app/composer/qgscomposer.cpp
===================================================================
--- trunk/qgis/src/app/composer/qgscomposer.cpp 2010-11-24 19:36:24 UTC (rev 14760)
+++ trunk/qgis/src/app/composer/qgscomposer.cpp 2010-11-25 07:47:24 UTC (rev 14761)
@@ -38,6 +38,7 @@
#include "qgscomposerattributetable.h"
#include "qgscomposertablewidget.h"
#include "qgsexception.h"
+#include "qgslogger.h"
#include "qgsproject.h"
#include "qgsmapcanvas.h"
#include "qgsmaprenderer.h"
@@ -46,27 +47,30 @@
#include "qgscursors.h"
#include <QCloseEvent>
+#include <QCheckBox>
#include <QDesktopWidget>
#include <QFileDialog>
#include <QFileInfo>
+#include <QIcon>
+#include <QImageWriter>
#include <QMatrix>
#include <QMenuBar>
#include <QMessageBox>
#include <QPageSetupDialog>
#include <QPainter>
-
+#include <QPixmap>
#include <QPrintDialog>
#include <QSettings>
-#include <QIcon>
-#include <QPixmap>
+#include <QSizeGrip>
#include <QSvgGenerator>
#include <QToolBar>
#include <QToolButton>
-#include <QImageWriter>
-#include <QCheckBox>
-#include <QSizeGrip>
-#include "qgslogger.h"
+//#include <QUndoView>
+
+
+
+
QgsComposer::QgsComposer( QgisApp *qgis, const QString& title ): QMainWindow(), mTitle( title )
{
setupUi( this );
@@ -212,6 +216,10 @@
mCompositionNameComboBox->insertItem( 0, tr( "Map 1" ) );
+ //undo widget
+ /*QUndoView* undoWidget = new QUndoView( mComposition->undoStack(), this );
+ mOptionsTabWidget->addTab( undoWidget, tr( "Command history" ) );*/
+
// Create size grip (needed by Mac OS X for QMainWindow if QStatusBar is not visible)
mSizeGrip = new QSizeGrip( this );
mSizeGrip->resize( mSizeGrip->sizeHint() );
@@ -507,7 +515,7 @@
void QgsComposer::print( QPrinter &printer )
{
- if ( !mComposition )
+ if ( !mComposition || !mView )
return;
if ( containsWMSLayer() )
@@ -530,6 +538,7 @@
QApplication::setOverrideCursor( Qt::BusyCursor );
bool printAsRaster = mComposition->printAsRaster();
+ //mView->setScene( 0 );
if ( printAsRaster )
{
@@ -545,8 +554,9 @@
QPainter imagePainter( &image );
QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
QRectF targetArea( 0, 0, width, height );
+ mView->setPaintingEnabled( false );
mComposition->render( &imagePainter, targetArea, sourceArea );
- imagePainter.end();
+ mView->setPaintingEnabled( true );
p.drawImage( targetArea, image, targetArea );
}
else
@@ -574,7 +584,10 @@
//better in case of custom page size, but only possible with Qt>=4.4.0
QRectF paperRectMM = printer.pageRect( QPrinter::Millimeter );
QRectF paperRectPixel = printer.pageRect( QPrinter::DevicePixel );
+
+ mView->setPaintingEnabled( false );
mComposition->render( &p, paperRectPixel, paperRectMM );
+ mView->setPaintingEnabled( true );
}
mComposition->setPlotStyle( savedPlotStyle );
@@ -707,19 +720,18 @@
}
mComposition->setPlotStyle( QgsComposition::Print );
- mView->setScene( 0 );
image.setDotsPerMeterX( mComposition->printResolution() / 25.4 * 1000 );
image.setDotsPerMeterY( mComposition->printResolution() / 25.4 * 1000 );
image.fill( 0 );
QPainter p( &image );
QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
QRectF targetArea( 0, 0, width, height );
+ mView->setPaintingEnabled( false );
mComposition->render( &p, targetArea, sourceArea );
p.end();
-
mComposition->setPlotStyle( QgsComposition::Preview );
+ mView->setPaintingEnabled( true );
image.save( myOutputFileNameQString, myFilterMap[myFilterString].toLocal8Bit().data() );
- mView->setScene( mComposition );
}
@@ -779,8 +791,6 @@
}
myQSettings.setValue( "/UI/lastSaveAsSvgFile", myOutputFileNameQString );
-
- //mView->setScene(0);//don't redraw the scene on the display while we render
mComposition->setPlotStyle( QgsComposition::Print );
QSvgGenerator generator;
@@ -799,12 +809,11 @@
QRectF sourceArea( 0, 0, mComposition->paperWidth(), mComposition->paperHeight() );
QRectF targetArea( 0, 0, width, height );
+ mView->setPaintingEnabled( false );
mComposition->render( &p, targetArea, sourceArea );
-
p.end();
-
mComposition->setPlotStyle( QgsComposition::Preview );
- //mView->setScene(mComposition->canvas()); //now that we're done, set the view to show the scene again
+ mView->setPaintingEnabled( true );
}
void QgsComposer::on_mActionSelectMoveItem_triggered()
Modified: trunk/qgis/src/gui/qgscomposerview.cpp
===================================================================
--- trunk/qgis/src/gui/qgscomposerview.cpp 2010-11-24 19:36:24 UTC (rev 14760)
+++ trunk/qgis/src/gui/qgscomposerview.cpp 2010-11-25 07:47:24 UTC (rev 14761)
@@ -31,7 +31,7 @@
#include "qgscomposerattributetable.h"
QgsComposerView::QgsComposerView( QWidget* parent, const char* name, Qt::WFlags f ) :
- QGraphicsView( parent ), mShiftKeyPressed( false ), mRubberBandItem( 0 ), mRubberBandLineItem( 0 ), mMoveContentItem( 0 )
+ QGraphicsView( parent ), mShiftKeyPressed( false ), mRubberBandItem( 0 ), mRubberBandLineItem( 0 ), mMoveContentItem( 0 ), mPaintingEnabled( true )
{
setResizeAnchor( QGraphicsView::AnchorViewCenter );
setMouseTracking( true );
@@ -204,6 +204,7 @@
double moveX = scenePoint.x() - mMoveContentStartPos.x();
double moveY = scenePoint.y() - mMoveContentStartPos.y();
+
mMoveContentItem->moveContent( -moveX, -moveY );
mMoveContentItem = 0;
}
@@ -450,6 +451,19 @@
}
}
+void QgsComposerView::paintEvent( QPaintEvent* event )
+{
+ if ( mPaintingEnabled )
+ {
+ QGraphicsView::paintEvent( event );
+ event->accept();
+ }
+ else
+ {
+ event->ignore();
+ }
+}
+
void QgsComposerView::setComposition( QgsComposition* c )
{
setScene( c );
Modified: trunk/qgis/src/gui/qgscomposerview.h
===================================================================
--- trunk/qgis/src/gui/qgscomposerview.h 2010-11-24 19:36:24 UTC (rev 14760)
+++ trunk/qgis/src/gui/qgscomposerview.h 2010-11-25 07:47:24 UTC (rev 14761)
@@ -98,6 +98,9 @@
/**Returns the composer main window*/
QMainWindow* composerWindow();
+ void setPaintingEnabled( bool enabled ) { mPaintingEnabled = enabled; }
+ bool paintingEnabled() const { return mPaintingEnabled; }
+
protected:
void mousePressEvent( QMouseEvent* );
void mouseReleaseEvent( QMouseEvent* );
@@ -109,6 +112,8 @@
void wheelEvent( QWheelEvent* event );
+ void paintEvent( QPaintEvent* event );
+
private:
/**Status of shift key (used for multiple selection)*/
bool mShiftKeyPressed;
@@ -125,6 +130,8 @@
/**Start of rubber band creation*/
QPointF mRubberBandStartPos;
+ bool mPaintingEnabled;
+
public slots:
/**For QgsComposerItemGroup to send its signals to QgsComposer (or other classes that keep track of input widgets)*/
void sendItemRemovedSignal( QgsComposerItem* item );
More information about the QGIS-commit
mailing list