[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