[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