[QGIS Commit] r9383 - in branches/advanced_printing_branch2/src: app/composer core/composer ui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Sep 23 02:48:28 EDT 2008


Author: mhugent
Date: 2008-09-23 02:48:28 -0400 (Tue, 23 Sep 2008)
New Revision: 9383

Modified:
   branches/advanced_printing_branch2/src/app/composer/qgscompositionwidget.cpp
   branches/advanced_printing_branch2/src/app/composer/qgscompositionwidget.h
   branches/advanced_printing_branch2/src/core/composer/qgscomposeritem.cpp
   branches/advanced_printing_branch2/src/core/composer/qgscomposeritem.h
   branches/advanced_printing_branch2/src/core/composer/qgscomposition.cpp
   branches/advanced_printing_branch2/src/core/composer/qgscomposition.h
   branches/advanced_printing_branch2/src/ui/qgscompositionwidgetbase.ui
Log:
Started implementation of grid snaping mechanism

Modified: branches/advanced_printing_branch2/src/app/composer/qgscompositionwidget.cpp
===================================================================
--- branches/advanced_printing_branch2/src/app/composer/qgscompositionwidget.cpp	2008-09-23 06:28:35 UTC (rev 9382)
+++ branches/advanced_printing_branch2/src/app/composer/qgscompositionwidget.cpp	2008-09-23 06:48:28 UTC (rev 9383)
@@ -275,6 +275,37 @@
   mResolutionLineEdit->blockSignals( false );
 }
 
+void QgsCompositionWidget::displaySnapingSettings()
+{
+  if(!mComposition)
+    {
+      return;
+    }
+
+  mSnapToGridCheckBox->blockSignals(true);
+  mResolutionSpinBox->blockSignals(true);
+  mOffsetXSpinBox->blockSignals(true);
+  mOffsetYSpinBox->blockSignals(true);
+  
+  if(mComposition->snapToGridEnabled())
+    {
+      mSnapToGridCheckBox->setCheckState(Qt::Checked);
+    }
+  else
+    {
+      mSnapToGridCheckBox->setCheckState(Qt::Unchecked);
+    }
+
+  mResolutionSpinBox->setValue(mComposition->snapGridResolution());
+  mOffsetXSpinBox->setValue(mComposition->snapGridOffsetX());
+  mOffsetYSpinBox->setValue(mComposition->snapGridOffsetY());
+
+  mSnapToGridCheckBox->blockSignals(false);
+  mResolutionSpinBox->blockSignals(false);
+  mOffsetXSpinBox->blockSignals(false);
+  mOffsetYSpinBox->blockSignals(false); 
+}
+
 void QgsCompositionWidget::on_mResolutionLineEdit_textChanged( const QString& text )
 {
   bool conversionOk;
@@ -290,3 +321,42 @@
     mComposition->setPrintoutResolution( resolutionInfo.resolution() );
   }
 }
+
+void QgsCompositionWidget::on_mSnapToGridCheckBox_stateChanged(int state)
+{
+  if(mComposition)
+    {
+      if(state == Qt::Checked)
+	{
+	  mComposition->setSnapToGridEnabled(true);
+	}
+      else
+	{
+	  mComposition->setSnapToGridEnabled(false);
+	}
+    }
+}
+
+void QgsCompositionWidget::on_mResolutionSpinBox_valueChanged(double d)
+{
+  if(mComposition)
+    {
+      mComposition->setSnapGridResolution(d);
+    }
+}
+
+void QgsCompositionWidget::on_mOffsetXSpinBox_valueChanged(double d)
+{
+  if(mComposition)
+    {
+      mComposition->setSnapGridOffsetX(d);
+    }
+}
+
+void QgsCompositionWidget::on_mOffsetYSpinBox_valueChanged(double d)
+{
+  if(mComposition)
+    {
+      mComposition->setSnapGridOffsetY(d);
+    }
+}

Modified: branches/advanced_printing_branch2/src/app/composer/qgscompositionwidget.h
===================================================================
--- branches/advanced_printing_branch2/src/app/composer/qgscompositionwidget.h	2008-09-23 06:28:35 UTC (rev 9382)
+++ branches/advanced_printing_branch2/src/app/composer/qgscompositionwidget.h	2008-09-23 06:48:28 UTC (rev 9383)
@@ -46,6 +46,11 @@
     void on_mPaperHeightLineEdit_editingFinished();
     void on_mResolutionLineEdit_textChanged( const QString& text );
 
+    void on_mSnapToGridCheckBox_stateChanged(int state);
+    void on_mResolutionSpinBox_valueChanged(double d);
+    void on_mOffsetXSpinBox_valueChanged(double d);
+    void on_mOffsetYSpinBox_valueChanged(double d);
+
   private:
     QgsComposition* mComposition;
     QMap<QString, QgsCompositionPaper> mPaperMap;
@@ -59,6 +64,8 @@
     void adjustOrientation();
     /**Sets GUI elements to width/height from composition*/
     void displayCompositionWidthHeight();
+    /**Sets GUI elements to snaping distances of composition*/
+    void displaySnapingSettings();
 
     void createPaperEntries();
     void insertPaperEntries();

Modified: branches/advanced_printing_branch2/src/core/composer/qgscomposeritem.cpp
===================================================================
--- branches/advanced_printing_branch2/src/core/composer/qgscomposeritem.cpp	2008-09-23 06:28:35 UTC (rev 9382)
+++ branches/advanced_printing_branch2/src/core/composer/qgscomposeritem.cpp	2008-09-23 06:48:28 UTC (rev 9383)
@@ -220,10 +220,18 @@
 void QgsComposerItem::mouseMoveEvent( QGraphicsSceneMouseEvent * event )
 {
   qWarning( "QgsComposerItem::mouseMoveEvent" );
+    
+  QPointF sceneMovePoint = event->lastScenePos();
+
+  if(composition() && composition()->snapToGridEnabled())
+    {
+      sceneMovePoint = composition()->snapPointToGrid(sceneMovePoint);
+    }
+
   if ( mBoundingResizeRectangle )
   {
-    double diffX = event->lastPos().x() - mLastMouseEventPos.x();
-    double diffY = event->lastPos().y() - mLastMouseEventPos.y();
+    double diffX = sceneMovePoint.x() - mLastMouseEventPos.x();
+    double diffY = sceneMovePoint.y() - mLastMouseEventPos.y();
 
     double mx, my, rx, ry;
 
@@ -242,14 +250,14 @@
     mBoundingResizeRectangle->setRect( newBoundingRect );
     mBoundingResizeRectangle->setTransform( transform );
   }
-  mLastMouseEventPos = event->lastPos();
+  mLastMouseEventPos = sceneMovePoint;
 }
 
 void QgsComposerItem::mousePressEvent( QGraphicsSceneMouseEvent * event )
 {
   //set current position and type of mouse move action
   mMouseMoveStartPos = event->lastScenePos();
-  mLastMouseEventPos = event->lastPos();
+  mLastMouseEventPos = event->lastScenePos();
   mCurrentMouseMoveAction = mouseMoveActionForPosition( event->pos() );
 
   //create and show bounding rectangle
@@ -277,6 +285,10 @@
   }
 
   QPointF mouseMoveStopPoint = event->lastScenePos();
+  if(composition() && composition()->snapToGridEnabled())
+    {
+      mouseMoveStopPoint = composition()->snapPointToGrid(mouseMoveStopPoint);
+    }
   double diffX = mouseMoveStopPoint.x() - mMouseMoveStartPos.x();
   double diffY = mouseMoveStopPoint.y() - mMouseMoveStartPos.y();
 

Modified: branches/advanced_printing_branch2/src/core/composer/qgscomposeritem.h
===================================================================
--- branches/advanced_printing_branch2/src/core/composer/qgscomposeritem.h	2008-09-23 06:28:35 UTC (rev 9382)
+++ branches/advanced_printing_branch2/src/core/composer/qgscomposeritem.h	2008-09-23 06:48:28 UTC (rev 9383)
@@ -142,7 +142,7 @@
     QgsComposerItem::mouseMoveAction mCurrentMouseMoveAction;
     /**Start point of the last mouse move action (in scene coordinates)*/
     QPointF mMouseMoveStartPos;
-    /**Position of the last mouse move event (in item coordinates)*/
+    /**Position of the last mouse move event (in scene coordinates)*/
     QPointF mLastMouseEventPos;
 
     /**Rectangle used during move and resize actions*/

Modified: branches/advanced_printing_branch2/src/core/composer/qgscomposition.cpp
===================================================================
--- branches/advanced_printing_branch2/src/core/composer/qgscomposition.cpp	2008-09-23 06:28:35 UTC (rev 9382)
+++ branches/advanced_printing_branch2/src/core/composer/qgscomposition.cpp	2008-09-23 06:48:28 UTC (rev 9383)
@@ -21,7 +21,7 @@
 #include <QDomElement>
 #include <QGraphicsRectItem>
 
-QgsComposition::QgsComposition( QgsMapRenderer* mapRenderer ): QGraphicsScene( 0 ), mMapRenderer( mapRenderer ), mPlotStyle( QgsComposition::Preview ), mPaperItem( 0 )
+QgsComposition::QgsComposition( QgsMapRenderer* mapRenderer ): QGraphicsScene( 0 ), mMapRenderer( mapRenderer ), mPlotStyle( QgsComposition::Preview ), mPaperItem( 0 ), mSnapToGrid(false), mSnapGridResolution(0.0), mSnapGridOffsetX(0.0), mSnapGridOffsetY(0.0)
 {
   setBackgroundBrush( Qt::gray );
 
@@ -33,7 +33,7 @@
   mPrintoutResolution = 300; //hardcoded default
 }
 
-QgsComposition::QgsComposition(): QGraphicsScene( 0 ), mMapRenderer( 0 ), mPlotStyle( QgsComposition::Preview ), mPaperItem( 0 )
+QgsComposition::QgsComposition(): QGraphicsScene( 0 ), mMapRenderer( 0 ), mPlotStyle( QgsComposition::Preview ), mPaperItem( 0 ), mSnapToGrid(false), mSnapGridResolution(0.0), mSnapGridOffsetX(0.0), mSnapGridOffsetY(0.0)
 {
 
 }
@@ -552,6 +552,20 @@
   }
 }
 
+QPointF QgsComposition::snapPointToGrid(const QPointF& scenePoint) const
+{
+  if(!mSnapToGrid || (!mSnapGridResolution > 0))
+    {
+      return scenePoint;
+    }
+
+  //snap x coordinate //todo: add support for x- and y- offset
+  int xRatio = (int)(scenePoint.x() / mSnapGridResolution + 0.5);
+  int yRatio = (int)(scenePoint.y() / mSnapGridResolution + 0.5);
+
+  return QPointF(xRatio * mSnapGridResolution, yRatio * mSnapGridResolution);
+}
+
 int QgsComposition::boundingRectOfSelectedItems(QRectF& bRect)
 {
   QList<QgsComposerItem*> selectedItems = selectedComposerItems();

Modified: branches/advanced_printing_branch2/src/core/composer/qgscomposition.h
===================================================================
--- branches/advanced_printing_branch2/src/core/composer/qgscomposition.h	2008-09-23 06:28:35 UTC (rev 9382)
+++ branches/advanced_printing_branch2/src/core/composer/qgscomposition.h	2008-09-23 06:48:28 UTC (rev 9383)
@@ -57,6 +57,18 @@
     /**Returns width of paper item*/
     double paperWidth() const;
 
+    void setSnapToGridEnabled(bool b) {mSnapToGrid = b;}
+    bool snapToGridEnabled() const {return mSnapToGrid;}
+
+    void setSnapGridResolution(double r){mSnapGridResolution = r;}
+    double snapGridResolution() const {return mSnapGridResolution;}
+
+    void setSnapGridOffsetX(double offset){mSnapGridOffsetX = offset;}
+    double snapGridOffsetX() const {return mSnapGridOffsetX;}
+
+    void setSnapGridOffsetY(double offset){mSnapGridOffsetY = offset;}
+    double snapGridOffsetY() const {return mSnapGridOffsetY;}
+
     /**Returns the topmose composer item. Ignores mPaperItem*/
     QgsComposerItem* composerItemAt( const QPointF & position );
 
@@ -119,7 +131,10 @@
      after reading all the items from xml file*/
     void sortZList();
 
+    /**Snaps a scene coordinate point to grid*/
+    QPointF snapPointToGrid(const QPointF& scenePoint) const;
 
+
   private:
     /**Pointer to map renderer of QGIS main map*/
     QgsMapRenderer* mMapRenderer;
@@ -132,6 +147,12 @@
     /**Dpi for printout*/
     int mPrintoutResolution;
 
+    /**Parameters for snap to grid function*/
+    bool mSnapToGrid;
+    double mSnapGridResolution;
+    double mSnapGridOffsetX;
+    double mSnapGridOffsetY;
+
     QgsComposition(); //default constructor is forbidden
 
     /**Reset z-values of items based on position in z list*/

Modified: branches/advanced_printing_branch2/src/ui/qgscompositionwidgetbase.ui
===================================================================
--- branches/advanced_printing_branch2/src/ui/qgscompositionwidgetbase.ui	2008-09-23 06:28:35 UTC (rev 9382)
+++ branches/advanced_printing_branch2/src/ui/qgscompositionwidgetbase.ui	2008-09-23 06:48:28 UTC (rev 9383)
@@ -5,8 +5,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>243</width>
-    <height>422</height>
+    <width>262</width>
+    <height>457</height>
    </rect>
   </property>
   <property name="sizePolicy" >
@@ -19,24 +19,6 @@
    <string>Composition</string>
   </property>
   <layout class="QGridLayout" >
-   <property name="leftMargin" >
-    <number>9</number>
-   </property>
-   <property name="topMargin" >
-    <number>9</number>
-   </property>
-   <property name="rightMargin" >
-    <number>9</number>
-   </property>
-   <property name="bottomMargin" >
-    <number>9</number>
-   </property>
-   <property name="horizontalSpacing" >
-    <number>6</number>
-   </property>
-   <property name="verticalSpacing" >
-    <number>6</number>
-   </property>
    <item row="0" column="0" colspan="2" >
     <widget class="QGroupBox" name="groupBox" >
      <property name="title" >
@@ -189,23 +171,53 @@
      </layout>
     </widget>
    </item>
-   <item row="2" column="0" colspan="2" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
+   <item row="1" column="0" colspan="2" >
+    <widget class="QGroupBox" name="mSnapGroupBox" >
+     <property name="title" >
+      <string>Snapping</string>
      </property>
-     <property name="sizeType" >
-      <enum>QSizePolicy::Expanding</enum>
-     </property>
-     <property name="sizeHint" >
-      <size>
-       <width>223</width>
-       <height>41</height>
-      </size>
-     </property>
-    </spacer>
+     <layout class="QGridLayout" >
+      <item row="0" column="0" >
+       <widget class="QCheckBox" name="mSnapToGridCheckBox" >
+        <property name="text" >
+         <string>Snap to grid</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" >
+       <widget class="QLabel" name="mResolutionLabel_2" >
+        <property name="text" >
+         <string>Grid resolution:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1" >
+       <widget class="QDoubleSpinBox" name="mResolutionSpinBox" />
+      </item>
+      <item row="2" column="0" >
+       <widget class="QLabel" name="mXOffsetLabel" >
+        <property name="text" >
+         <string>Offset x:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1" >
+       <widget class="QDoubleSpinBox" name="mOffsetXSpinBox" />
+      </item>
+      <item row="3" column="0" >
+       <widget class="QLabel" name="mYOffsetLabel" >
+        <property name="text" >
+         <string>Offset y:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1" >
+       <widget class="QDoubleSpinBox" name="mOffsetYSpinBox" />
+      </item>
+     </layout>
+    </widget>
    </item>
-   <item row="1" column="0" >
+   <item row="2" column="0" >
     <widget class="QLabel" name="mResolutionLabel" >
      <property name="sizePolicy" >
       <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
@@ -221,7 +233,7 @@
      </property>
     </widget>
    </item>
-   <item row="1" column="1" >
+   <item row="2" column="1" >
     <widget class="QLineEdit" name="mResolutionLineEdit" />
    </item>
   </layout>



More information about the QGIS-commit mailing list