[QGIS Commit] r14623 - in trunk/qgis/src: app ui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Sat Nov 13 17:00:10 EST 2010
Author: jef
Date: 2010-11-13 14:00:10 -0800 (Sat, 13 Nov 2010)
New Revision: 14623
Modified:
trunk/qgis/src/app/qgisapp.cpp
trunk/qgis/src/app/qgisapp.h
trunk/qgis/src/app/qgsoptions.cpp
trunk/qgis/src/app/qgsprojectproperties.cpp
trunk/qgis/src/app/qgsprojectproperties.h
trunk/qgis/src/app/qgssnappingdialog.cpp
trunk/qgis/src/app/qgssnappingdialog.h
trunk/qgis/src/ui/qgsoptionsbase.ui
trunk/qgis/src/ui/qgsprojectpropertiesbase.ui
trunk/qgis/src/ui/qgssnappingdialogbase.ui
Log:
apply #3206
Modified: trunk/qgis/src/app/qgisapp.cpp
===================================================================
--- trunk/qgis/src/app/qgisapp.cpp 2010-11-13 21:27:42 UTC (rev 14622)
+++ trunk/qgis/src/app/qgisapp.cpp 2010-11-13 22:00:10 UTC (rev 14623)
@@ -162,6 +162,7 @@
#include "qgsquerybuilder.h"
#include "qgsattributeaction.h"
#include "qgsgpsinformationwidget.h"
+#include "qgssnappingdialog.h"
//
// Gdal/Ogr includes
@@ -430,6 +431,9 @@
addDockWidget( Qt::LeftDockWidgetArea, mUndoWidget );
mUndoWidget->hide();
+ mSnappingDialog = new QgsSnappingDialog( this, mMapCanvas );
+ mSnappingDialog->setObjectName( "SnappingOption" );
+
mInternalClipboard = new QgsClipboard; // create clipboard
mQgisInterface = new QgisAppInterface( this ); // create the interfce
@@ -862,6 +866,11 @@
connect( mActionRotatePointSymbols, SIGNAL( triggered() ), this, SLOT( rotatePointSymbols() ) );
mActionRotatePointSymbols->setEnabled( false );
+ mActionSnappingOptions = new QAction( getThemeIcon( "mActionSnappingOptions.png" ), tr( "Snapping Options..." ), this );
+ shortcuts->registerAction( mActionSnappingOptions );
+ mActionSnappingOptions->setStatusTip( tr( "Manage the background snapping options" ) );
+ connect( mActionSnappingOptions, SIGNAL( triggered() ), this, SLOT( snappingOptions() ) );
+
// View Menu Items
mActionPan = new QAction( getThemeIcon( "mActionPan.png" ), tr( "Pan Map" ), this );
@@ -1441,6 +1450,14 @@
mEditMenu->addAction( mActionNodeTool );
mEditMenu->addAction( mActionRotatePointSymbols );
+ QSettings myQsettings;
+ bool myDockFlag = myQsettings.value( "/qgis/dockSnapping", false ).toBool();
+ if ( !myDockFlag )
+ {
+ mActionEditSeparator4 = mEditMenu->addSeparator();
+ mEditMenu->addAction( mActionSnappingOptions );
+ }
+
if ( layout == QDialogButtonBox::GnomeLayout || layout == QDialogButtonBox::MacLayout )
{
mActionEditSeparator3 = mEditMenu->addSeparator();
@@ -4446,6 +4463,11 @@
mMapCanvas->setMapTool( mMapTools.mRotatePointSymbolsTool );
}
+void QgisApp::snappingOptions()
+{
+ mSnappingDialog->show();
+}
+
void QgisApp::splitFeatures()
{
mMapCanvas->setMapTool( mMapTools.mSplitFeatures );
Modified: trunk/qgis/src/app/qgisapp.h
===================================================================
--- trunk/qgis/src/app/qgisapp.h 2010-11-13 21:27:42 UTC (rev 14622)
+++ trunk/qgis/src/app/qgisapp.h 2010-11-13 22:00:10 UTC (rev 14623)
@@ -67,6 +67,7 @@
class QNetworkProxy;
class QAuthenticator;
+class QgsSnappingDialog;
class QgsGPSInformationWidget;
#include <QMainWindow>
@@ -78,6 +79,7 @@
#include "qgsconfig.h"
#include "qgsfeature.h"
#include "qgspoint.h"
+#include "qgssnappingdialog.h"
/*! \class QgisApp
* \brief Main window for the Qgis application
@@ -242,6 +244,8 @@
QAction *actionDeletePart() { return mActionDeletePart; }
QAction *actionNodeTool() { return mActionNodeTool; }
QAction *actionEditSeparator2() { return mActionEditSeparator2; }
+ QAction *actionSnappingOptions() { return mActionSnappingOptions; }
+ QAction *actionEditSeparator4() { return mActionEditSeparator4; }
QAction *actionPan() { return mActionPan; }
QAction *actionZoomIn() { return mActionZoomIn; }
@@ -618,6 +622,8 @@
void nodeTool();
//! activates the rotate points tool
void rotatePointSymbols();
+ //! shows the snapping Options
+ void snappingOptions();
//! activates the selection tool
void select();
@@ -900,6 +906,8 @@
QAction *mActionNodeTool;
QAction *mActionRotatePointSymbols;
QAction *mActionEditSeparator3;
+ QAction *mActionSnappingOptions;
+ QAction *mActionEditSeparator4;
QAction *mActionPan;
QAction *mActionZoomIn;
@@ -1015,6 +1023,7 @@
QDockWidget *mpTileScaleDock;
QDockWidget *mpGpsDock;
+
#ifdef Q_WS_MAC
//! Window menu action to select this window
QAction *mWindowAction;
@@ -1165,6 +1174,8 @@
QgsUndoWidget* mUndoWidget;
+ QgsSnappingDialog* mSnappingDialog;
+
//! Persistent tile scale slider
QgsTileScaleWidget * mpTileScaleWidget;
Modified: trunk/qgis/src/app/qgsoptions.cpp
===================================================================
--- trunk/qgis/src/app/qgsoptions.cpp 2010-11-13 21:27:42 UTC (rev 14622)
+++ trunk/qgis/src/app/qgsoptions.cpp 2010-11-13 22:00:10 UTC (rev 14623)
@@ -249,6 +249,7 @@
cbxHideSplash->setChecked( settings.value( "/qgis/hideSplash", false ).toBool() );
cbxAttributeTableDocked->setChecked( settings.value( "/qgis/dockAttributeTable", false ).toBool() );
cbxIdentifyResultsDocked->setChecked( settings.value( "/qgis/dockIdentifyResults", false ).toBool() );
+ cbxSnappingOptionsDocked->setChecked( settings.value( "/qgis/dockSnapping", false ).toBool() );
cbxAddPostgisDC->setChecked( settings.value( "/qgis/addPostgisDC", false ).toBool() );
cbxAddNewLayersToCurrentGroup->setChecked( settings.value( "/qgis/addNewLayersToCurrentGroup", false ).toBool() );
cbxCreateRasterLegendIcons->setChecked( settings.value( "/qgis/createRasterLegendIcons", true ).toBool() );
@@ -505,6 +506,7 @@
settings.setValue( "/qgis/dockAttributeTable", cbxAttributeTableDocked->isChecked() );
settings.setValue( "/qgis/attributeTableBehaviour", cmbAttrTableBehaviour->currentIndex() );
settings.setValue( "/qgis/dockIdentifyResults", cbxIdentifyResultsDocked->isChecked() );
+ settings.setValue( "/qgis/dockSnapping", cbxSnappingOptionsDocked->isChecked() );
settings.setValue( "/qgis/addPostgisDC", cbxAddPostgisDC->isChecked() );
settings.setValue( "/qgis/addNewLayersToCurrentGroup", cbxAddNewLayersToCurrentGroup->isChecked() );
settings.setValue( "/qgis/createRasterLegendIcons", cbxCreateRasterLegendIcons->isChecked() );
Modified: trunk/qgis/src/app/qgsprojectproperties.cpp
===================================================================
--- trunk/qgis/src/app/qgsprojectproperties.cpp 2010-11-13 21:27:42 UTC (rev 14622)
+++ trunk/qgis/src/app/qgsprojectproperties.cpp 2010-11-13 22:00:10 UTC (rev 14623)
@@ -127,91 +127,8 @@
}
}
- bool layerIdListOk, enabledListOk, toleranceListOk, toleranceUnitListOk, snapToListOk;
- QStringList layerIdList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingList", &layerIdListOk );
- QStringList enabledList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingEnabledList", &enabledListOk );
- QStringList toleranceList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingToleranceList", & toleranceListOk );
- QStringList toleranceUnitList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingToleranceUnitList", & toleranceUnitListOk );
- QStringList snapToList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnapToList", &snapToListOk );
-
- QStringList::const_iterator idIter = layerIdList.constBegin();
- QStringList::const_iterator enabledIter = enabledList.constBegin();
- QStringList::const_iterator tolIter = toleranceList.constBegin();
- QStringList::const_iterator tolUnitIter = toleranceUnitList.constBegin();
- QStringList::const_iterator snapToIter = snapToList.constBegin();
-
QgsMapLayer* currentLayer = 0;
- //create the new layer entries
- for ( ; idIter != layerIdList.constEnd(); ++idIter, ++enabledIter, ++tolIter, ++tolUnitIter, ++snapToIter )
- {
- if ( layerIdListOk )
- {
- currentLayer = QgsMapLayerRegistry::instance()->mapLayer( *idIter );
- }
- else
- {
- break;
- }
-
- if ( currentLayer )
- {
- LayerEntry newEntry;
- newEntry.layerName = currentLayer->name();
-
- newEntry.checked = false;
- if ( enabledListOk && enabledIter != enabledList.constEnd() )
- {
- if (( *enabledIter ) == "enabled" )
- {
- newEntry.checked = true;
- }
- }
-
- //snap to vertex / segment / vertex and segment
- if ( snapToListOk && snapToIter != snapToList.constEnd() )
- {
- if (( *snapToIter ) == "to_vertex" )
- {
- newEntry.snapTo = 0;
- }
- else if (( *snapToIter ) == "to_segment" )
- {
- newEntry.snapTo = 1;
- }
- else //to vertex and segment
- {
- newEntry.snapTo = 2;
- }
- }
- else
- {
- newEntry.snapTo = 0;
- }
-
- //snap tolerance
- if ( toleranceListOk && tolIter != toleranceList.constEnd() )
- {
- newEntry.tolerance = tolIter->toDouble();
- }
- else
- {
- newEntry.tolerance = 0;
- }
-
- //snap tolerance unit
- if ( toleranceUnitListOk && tolUnitIter != toleranceUnitList.constEnd() )
- {
- newEntry.toleranceUnit = tolUnitIter->toInt();
- }
- else
- {
- newEntry.toleranceUnit = 0;
- }
- mSnappingLayerSettings.insert( *idIter, newEntry );
- }
- }
-
QStringList noIdentifyLayerIdList = QgsProject::instance()->readListEntry( "Identify", "/disabledLayers" );
const QMap<QString, QgsMapLayer*> &mapLayers = QgsMapLayerRegistry::instance()->mapLayers();
@@ -418,51 +335,6 @@
QgsProject::instance()->writeEntry( "Digitizing", "/AvoidIntersectionsList", avoidIntersectionList );
- QMap<QString, LayerEntry>::const_iterator layerEntryIt;
-
- //store the layer snapping settings as string lists
- QStringList layerIdList;
- QStringList snapToList;
- QStringList toleranceList;
- QStringList enabledList;
- QStringList toleranceUnitList;
-
- for ( layerEntryIt = mSnappingLayerSettings.constBegin(); layerEntryIt != mSnappingLayerSettings.constEnd(); ++layerEntryIt )
- {
- layerIdList << layerEntryIt.key();
- toleranceList << QString::number( layerEntryIt->tolerance, 'f' );
- toleranceUnitList << QString::number(( int )layerEntryIt->toleranceUnit );
- if ( layerEntryIt->checked )
- {
- enabledList << "enabled";
- }
- else
- {
- enabledList << "disabled";
- }
- if ( layerEntryIt->snapTo == 0 )
- {
- snapToList << "to_vertex";
- }
- else if ( layerEntryIt->snapTo == 1 )
- {
- snapToList << "to_segment";
- }
- else //to vertex and segment
- {
- snapToList << "to_vertex_and_segment";
- }
- }
-
- if ( mSnappingLayerSettings.size() > 0 )
- {
- QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingList", layerIdList );
- QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnapToList", snapToList );
- QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingToleranceList", toleranceList );
- QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingToleranceUnitList", toleranceUnitList );
- QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingEnabledList", enabledList );
- }
-
QStringList noIdentifyLayerList;
for ( int i = 0; i < twIdentifyLayers->rowCount(); i++ )
{
@@ -517,15 +389,6 @@
}
}
-void QgsProjectProperties::on_mSnappingOptionsPushButton_clicked()
-{
- QgsSnappingDialog d( mMapCanvas, mSnappingLayerSettings );
- if ( d.exec() == QDialog::Accepted )
- {
- //retrieve the new layer snapping settings from the dialog
- d.layerSettings( mSnappingLayerSettings );
- }
-}
void QgsProjectProperties::on_cbxProjectionEnabled_stateChanged( int state )
{
Modified: trunk/qgis/src/app/qgsprojectproperties.h
===================================================================
--- trunk/qgis/src/app/qgsprojectproperties.h 2010-11-13 21:27:42 UTC (rev 14622)
+++ trunk/qgis/src/app/qgsprojectproperties.h 2010-11-13 22:00:10 UTC (rev 14623)
@@ -95,11 +95,6 @@
*/
void on_mAvoidIntersectionsPushButton_clicked();
- /*!
- * Slot to show dialog for the layer snapping options
- */
- void on_mSnappingOptionsPushButton_clicked();
-
void on_cbxProjectionEnabled_stateChanged( int state );
/*!
@@ -118,15 +113,9 @@
private:
QgsMapCanvas* mMapCanvas;
- /**Snapping settings to pass/read from QgsSnappingDialog.
- Key is the layer id, the pair consists of snap to vertex = 0/snap to segment = 1,
- snapping tolerance*/
- QMap<QString, LayerEntry> mSnappingLayerSettings;
-
/**Stores ids of layers where intersections of new polygons is considered. Is passed to / read from QgsAvoidIntersectionsDialog*/
QSet<QString> mAvoidIntersectionsSettings;
-
/*!
* Function to save dialog window state
*/
Modified: trunk/qgis/src/app/qgssnappingdialog.cpp
===================================================================
--- trunk/qgis/src/app/qgssnappingdialog.cpp 2010-11-13 21:27:42 UTC (rev 14622)
+++ trunk/qgis/src/app/qgssnappingdialog.cpp 2010-11-13 22:00:10 UTC (rev 14623)
@@ -19,174 +19,203 @@
#include "qgsmapcanvas.h"
#include "qgsmaplayer.h"
#include "qgsvectorlayer.h"
+#include "qgsmaplayerregistry.h"
+#include "qgisapp.h"
+#include "qgsproject.h"
#include <QCheckBox>
#include <QDoubleValidator>
#include <QComboBox>
#include <QLineEdit>
+#include <QDockWidget>
-QgsSnappingDialog::QgsSnappingDialog( QgsMapCanvas* canvas, const QMap<QString, LayerEntry >& settings ): mMapCanvas( canvas )
+
+class QgsSnappingDock : public QDockWidget
{
- setupUi( this );
- connect( mButtonBox, SIGNAL( accepted() ), this, SLOT( accept() ) );
- connect( mButtonBox, SIGNAL( rejected() ), this, SLOT( reject() ) );
+ public:
+ QgsSnappingDock( const QString & title, QWidget * parent = 0, Qt::WindowFlags flags = 0 )
+ : QDockWidget( title, parent, flags )
+ {
+ setObjectName( "Snapping Options" ); // set object name so the position can be saved
+ }
- //an entry for each layer
- int nLayers = mMapCanvas->layerCount();
- int nVectorLayers = 0;
- //mLayerTableWidget->setRowCount(nLayers);
+ virtual void closeEvent( QCloseEvent * ev )
+ {
+ //deleteLater();
+ }
- QgsMapLayer* currentLayer = 0;
- QgsVectorLayer* currentVectorLayer = 0;
- QString currentLayerName;
- QMap<QString, LayerEntry >::const_iterator settingIt;
- QTreeWidgetItem* newItem = 0;
+};
- if ( mMapCanvas )
+QgsSnappingDialog::QgsSnappingDialog( QWidget* parent, QgsMapCanvas* canvas ): QDialog( parent ), mMapCanvas( canvas )
+{
+ setupUi( this );
+
+ QSettings myQsettings;
+ bool myDockFlag = myQsettings.value( "/qgis/dockSnapping", false ).toBool();
+ if ( myDockFlag )
{
- for ( int i = 0; i < nLayers; ++i )
- {
- currentLayer = mMapCanvas->layer( i );
- if ( currentLayer )
- {
- currentVectorLayer = qobject_cast<QgsVectorLayer *>( currentLayer );
- if ( currentVectorLayer )
- {
- //snap to layer yes/no
- newItem = new QTreeWidgetItem( mLayerTreeWidget );
- newItem->setText( 0, currentLayer->name() );
- mLayerIds << currentLayer->getLayerID(); //store also the layer id
- newItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsUserCheckable );
- newItem->setCheckState( 0, Qt::Unchecked );
+ mDock = new QgsSnappingDock( tr( "Snapping Options" ), QgisApp::instance() );
+ mDock->setAllowedAreas( Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea );
+ mDock->setWidget( this );
+ connect( this, SIGNAL( destroyed() ), mDock, SLOT( close() ) );
+ QgisApp::instance()->addDockWidget( Qt::BottomDockWidgetArea, mDock );
+ mButtonBox->setVisible( false );
+ }
+ else
+ {
+ connect( mButtonBox, SIGNAL( accepted() ), this, SLOT( apply() ) );
+ }
+ connect( QgsMapLayerRegistry::instance(), SIGNAL( layerWasAdded( QgsMapLayer * ) ), this, SLOT( update() ) );
+ connect( QgsMapLayerRegistry::instance(), SIGNAL( layerWillBeRemoved( QString ) ), this, SLOT( update() ) );
- //snap to vertex/ snap to segment
- QComboBox* snapToComboBox = new QComboBox( mLayerTreeWidget );
- snapToComboBox->insertItem( 0, tr( "to vertex" ) );
- snapToComboBox->insertItem( 1, tr( "to segment" ) );
- snapToComboBox->insertItem( 2, tr( "to vertex and segment" ) );
- mLayerTreeWidget->setItemWidget( newItem, 1, snapToComboBox );
+ update();
- //snapping tolerance
- QLineEdit* snappingToleranceEdit = new QLineEdit( mLayerTreeWidget );
- QDoubleValidator* validator = new QDoubleValidator( snappingToleranceEdit );
- snappingToleranceEdit->setValidator( validator );
- mLayerTreeWidget->setItemWidget( newItem, 2, snappingToleranceEdit );
-
- //snap to vertex/ snap to segment
- QComboBox* toleranceUnitsComboBox = new QComboBox( mLayerTreeWidget );
- toleranceUnitsComboBox->insertItem( 0, tr( "map units" ) );
- toleranceUnitsComboBox->insertItem( 1, tr( "pixels" ) );
- mLayerTreeWidget->setItemWidget( newItem, 3, toleranceUnitsComboBox );
-
- settingIt = settings.find( currentVectorLayer->getLayerID() );
- if ( settingIt != settings.constEnd() )
- {
- snappingToleranceEdit->setText( QString::number( settingIt.value().tolerance ) );
- int index;
- if ( settingIt.value().snapTo == 0 )//to segment
- {
- index = snapToComboBox->findText( tr( "to vertex" ) );
- }
- else if ( settingIt.value().snapTo == 1 ) //to vertex
- {
- index = snapToComboBox->findText( tr( "to segment" ) );
- }
- else //to vertex and segment
- {
- index = snapToComboBox->findText( tr( "to vertex and segment" ) );
- }
- snapToComboBox->setCurrentIndex( index );
- if ( settingIt.value().toleranceUnit == 0 )//map units
- {
- index = toleranceUnitsComboBox->findText( tr( "map units" ) );
- }
- else
- {
- index = toleranceUnitsComboBox->findText( tr( "pixels" ) );
- }
- toleranceUnitsComboBox->setCurrentIndex( index );
- if ( settingIt.value().checked )
- {
- newItem->setCheckState( 0, Qt::Checked );
- }
- }
- else //insert the default values
- {
- snappingToleranceEdit->setText( "0" );
- }
- ++nVectorLayers;
- }
- }
- }
- mLayerTreeWidget->resizeColumnToContents( 0 );
- mLayerTreeWidget->setColumnWidth( 1, 200 ); //hardcoded for now
- mLayerTreeWidget->resizeColumnToContents( 2 );
- mLayerTreeWidget->resizeColumnToContents( 3 );
- }
+ mLayerTreeWidget->setHeaderLabels( QStringList() << "" );
+ mLayerTreeWidget->resizeColumnToContents( 0 );
+ mLayerTreeWidget->setColumnWidth( 1, 200 ); //hardcoded for now
+ mLayerTreeWidget->setColumnWidth( 2, 200 ); //hardcoded for now
+ mLayerTreeWidget->resizeColumnToContents( 3 );
+ mLayerTreeWidget->resizeColumnToContents( 4 );
+ mLayerTreeWidget->setSortingEnabled( true );
}
QgsSnappingDialog::QgsSnappingDialog()
{
-
}
QgsSnappingDialog::~QgsSnappingDialog()
{
+}
+void QgsSnappingDialog::closeEvent( QCloseEvent* event )
+{
+ QDialog::closeEvent( event );
+
+ if ( mDock == NULL )
+ {
+ QSettings settings;
+ settings.setValue( "/Windows/BetterSnapping/geometry", saveGeometry() );
+ }
}
-void QgsSnappingDialog::layerSettings( QMap<QString, LayerEntry>& settings ) const
+
+void QgsSnappingDialog::update()
{
- settings.clear();
+ if ( !mMapCanvas )
+ return;
- int nRows = mLayerTreeWidget->topLevelItemCount();
- QTreeWidgetItem* currentItem = 0;
- QString layerId;
- QString layerName;
- QString snapToItemText;
- QString toleranceItemText;
- int snapTo;
- int toleranceUnit;
- double tolerance;
- bool checked = false;
+ QSettings myQsettings;
+ bool myDockFlag = myQsettings.value( "/qgis/dockSnapping", false ).toBool();
- for ( int i = 0; i < nRows; ++i )
+ bool layerIdListOk, enabledListOk, toleranceListOk, toleranceUnitListOk, snapToListOk;
+ QStringList layerIdList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingList", &layerIdListOk );
+ QStringList enabledList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingEnabledList", &enabledListOk );
+ QStringList toleranceList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingToleranceList", & toleranceListOk );
+ QStringList toleranceUnitList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingToleranceUnitList", & toleranceUnitListOk );
+ QStringList snapToList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnapToList", &snapToListOk );
+
+ mLayerTreeWidget->clear();
+
+ for ( int i = 0; i < mMapCanvas->layerCount(); ++i )
{
- currentItem = mLayerTreeWidget->topLevelItem( i );
- if ( !currentItem )
+ QgsVectorLayer *currentVectorLayer = qobject_cast<QgsVectorLayer *>( mMapCanvas->layer( i ) );
+ if ( !currentVectorLayer )
+ continue;
+
+ //snap to layer yes/no
+ QTreeWidgetItem *item = new QTreeWidgetItem( mLayerTreeWidget );
+
+ QCheckBox *cbxEnable = new QCheckBox( mLayerTreeWidget );
+ mLayerTreeWidget->setItemWidget( item, 0, cbxEnable );
+ item->setData( 0, Qt::UserRole, currentVectorLayer->getLayerID() );
+
+ item->setText( 1, currentVectorLayer->name() );
+
+ //snap to vertex/ snap to segment
+ QComboBox *cbxSnapTo = new QComboBox( mLayerTreeWidget );
+ cbxSnapTo->insertItem( 0, tr( "to vertex" ) );
+ cbxSnapTo->insertItem( 1, tr( "to segment" ) );
+ cbxSnapTo->insertItem( 2, tr( "to vertex and segment" ) );
+ mLayerTreeWidget->setItemWidget( item, 2, cbxSnapTo );
+
+ //snapping tolerance
+ QLineEdit *leTolerance = new QLineEdit( mLayerTreeWidget );
+ QDoubleValidator *validator = new QDoubleValidator( leTolerance );
+ leTolerance->setValidator( validator );
+
+ mLayerTreeWidget->setItemWidget( item, 3, leTolerance );
+
+ //snap to vertex/ snap to segment
+ QComboBox *cbxUnits = new QComboBox( mLayerTreeWidget );
+ cbxUnits->insertItem( 0, tr( "map units" ) );
+ cbxUnits->insertItem( 1, tr( "pixels" ) );
+ mLayerTreeWidget->setItemWidget( item, 4, cbxUnits );
+
+ int idx = layerIdList.indexOf( currentVectorLayer->getLayerID() );
+ if ( idx < 0 )
{
+ // no settings for this layer yet
continue;
}
- //get layer id, to vertex/to segment and tolerance
- layerName = currentItem->text( 0 );
- layerId = mLayerIds.at( i );
- checked = ( currentItem->checkState( 0 ) == Qt::Checked );
- snapToItemText = (( QComboBox* )( mLayerTreeWidget->itemWidget( currentItem, 1 ) ) )->currentText();
- toleranceItemText = (( QComboBox* )( mLayerTreeWidget->itemWidget( currentItem, 3 ) ) )->currentText();
- if ( snapToItemText == tr( "to vertex" ) )
+ cbxEnable->setChecked( enabledList[ idx ] == "enabled" );
+ cbxSnapTo->setCurrentIndex( snapToList[idx].toInt() );
+ leTolerance->setText( QString::number( toleranceList[idx].toDouble(), 'f' ) );
+ cbxUnits->setCurrentIndex( toleranceUnitList[i].toInt() );
+ }
+
+ if ( myDockFlag )
+ {
+ for ( int i = 0; i < mLayerTreeWidget->topLevelItemCount(); ++i )
{
- snapTo = 0;
+ QTreeWidgetItem *item = mLayerTreeWidget->topLevelItem( i );
+ connect( mLayerTreeWidget->itemWidget( item, 0 ), SIGNAL( stateChanged( int ) ), this, SLOT( apply() ) );
+ connect( mLayerTreeWidget->itemWidget( item, 2 ), SIGNAL( currentIndexChanged( int ) ), this, SLOT( apply() ) );
+ connect( mLayerTreeWidget->itemWidget( item, 3 ), SIGNAL( textEdited( const QString ) ), this, SLOT( apply() ) );
+ connect( mLayerTreeWidget->itemWidget( item, 4 ), SIGNAL( currentIndexChanged( int ) ), this, SLOT( apply() ) );
}
- else if ( snapToItemText == tr( "to segment" ) )
+ }
+}
+
+void QgsSnappingDialog::apply()
+{
+ QStringList layerIdList;
+ QStringList snapToList;
+ QStringList toleranceList;
+ QStringList enabledList;
+ QStringList toleranceUnitList;
+
+ for ( int i = 0; i < mLayerTreeWidget->topLevelItemCount(); ++i )
+ {
+ QTreeWidgetItem *currentItem = mLayerTreeWidget->topLevelItem( i );
+ if ( !currentItem )
{
- snapTo = 1;
+ continue;
}
- else //to vertex and segment
+
+ layerIdList << currentItem->data( 0, Qt::UserRole ).toString();
+ enabledList << ( qobject_cast<QCheckBox*>( mLayerTreeWidget->itemWidget( currentItem, 0 ) )->isChecked() ? "enabled" : "disabled" );
+
+ QString snapToItemText = qobject_cast<QComboBox*>( mLayerTreeWidget->itemWidget( currentItem, 2 ) )->currentText();
+ if ( snapToItemText == tr( "to vertex" ) )
{
- snapTo = 2;
+ snapToList << "to_vertex";
}
- if ( toleranceItemText == tr( "map units" ) )
+ else if ( snapToItemText == tr( "to segment" ) )
{
- toleranceUnit = 0;
+ snapToList << "to_segment";
}
else //to vertex and segment
{
- toleranceUnit = 1;
+ snapToList << "to_vertex_and_segment";
}
- tolerance = (( QLineEdit* )( mLayerTreeWidget->itemWidget( currentItem, 2 ) ) )->text().toDouble();
- LayerEntry newEntry;
- newEntry.checked = checked; newEntry.snapTo = snapTo; newEntry.layerName = layerName;
- newEntry.tolerance = tolerance; newEntry.toleranceUnit = toleranceUnit;
- settings.insert( layerId, newEntry );
+
+ toleranceList << QString::number( qobject_cast<QLineEdit*>( mLayerTreeWidget->itemWidget( currentItem, 3 ) )->text().toDouble(), 'f' );
+ toleranceUnitList << QString::number( qobject_cast<QComboBox*>( mLayerTreeWidget->itemWidget( currentItem, 4 ) )->currentIndex() );
}
+
+ QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingList", layerIdList );
+ QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnapToList", snapToList );
+ QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingToleranceList", toleranceList );
+ QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingToleranceUnitList", toleranceUnitList );
+ QgsProject::instance()->writeEntry( "Digitizing", "/LayerSnappingEnabledList", enabledList );
}
Modified: trunk/qgis/src/app/qgssnappingdialog.h
===================================================================
--- trunk/qgis/src/app/qgssnappingdialog.h 2010-11-13 21:27:42 UTC (rev 14622)
+++ trunk/qgis/src/app/qgssnappingdialog.h 2010-11-13 22:00:10 UTC (rev 14623)
@@ -20,17 +20,10 @@
#include "ui_qgssnappingdialogbase.h"
+class QDockWidget;
+
class QgsMapCanvas;
-struct LayerEntry
-{
- bool checked;
- int snapTo; //0 = to vertex, 1 = to segment, 2 = to vertex and to segment
- QString layerName;
- double tolerance;
- int toleranceUnit; // 0 = map units, 1 = pixels
-};
-
/**A dialog to enter advanced editing properties, e.g. topological editing, snapping settings
for the individual layers*/
class QgsSnappingDialog: public QDialog, private Ui::QgsSnappingDialogBase
@@ -38,23 +31,44 @@
Q_OBJECT
public:
- /**Constructor
- @param canvas pointer to the map canvas (for detecting which vector layers are loaded
- @param settings existing snapping layer settings*/
- QgsSnappingDialog( QgsMapCanvas* canvas, const QMap<QString, LayerEntry >& settings );
+
+ //! Returns the instance pointer, creating the object on the first call
+ //static QgsSnappingDialog * instance( QgsMapCanvas* canvas );
+ QgsSnappingDialog( QWidget* parent, QgsMapCanvas* canvas );
~QgsSnappingDialog();
- /**Returns the snapping settings per layer. Key of the map is the layer id and value the
- corresponding layer entry*/
- void layerSettings( QMap<QString, LayerEntry>& settings ) const;
+ public slots:
+ /**
+ * apply the changes
+ */
+ void apply();
+ /**
+ * update the Dialog
+ */
+ void update();
+
+
+ protected:
+ /**Constructor
+ @param canvas pointer to the map canvas (for detecting which vector layers are loaded
+ */
+ //QgsSnappingDialog( QgsMapCanvas* canvas );
+ /**
+ * Handle closing of the window
+ * @param event unused
+ */
+ void closeEvent( QCloseEvent* event );
+
+
private:
/**Default constructor forbidden*/
QgsSnappingDialog();
+
/**Used to query the loaded layers*/
QgsMapCanvas* mMapCanvas;
- /**Stores the layer ids from top to bottom*/
- QStringList mLayerIds;
+
+ QDockWidget *mDock;
};
#endif
Modified: trunk/qgis/src/ui/qgsoptionsbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsoptionsbase.ui 2010-11-13 21:27:42 UTC (rev 14622)
+++ trunk/qgis/src/ui/qgsoptionsbase.ui 2010-11-13 22:00:10 UTC (rev 14623)
@@ -247,9 +247,16 @@
</widget>
</item>
<item>
+ <widget class="QCheckBox" name="cbxSnappingOptionsDocked">
+ <property name="text">
+ <string>Open snapping options in a dock window (QGIS restart required)</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QCheckBox" name="cbxAttributeTableDocked">
<property name="text">
- <string>Open attribute table in a dock window</string>
+ <string>Open attribute table in a dock window (QGIS restart required)</string>
</property>
</widget>
</item>
Modified: trunk/qgis/src/ui/qgsprojectpropertiesbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsprojectpropertiesbase.ui 2010-11-13 21:27:42 UTC (rev 14622)
+++ trunk/qgis/src/ui/qgsprojectpropertiesbase.ui 2010-11-13 22:00:10 UTC (rev 14623)
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>552</width>
- <height>525</height>
+ <width>555</width>
+ <height>538</height>
</rect>
</property>
<property name="windowTitle">
@@ -301,13 +301,6 @@
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QPushButton" name="mSnappingOptionsPushButton">
- <property name="text">
- <string>Snapping options...</string>
- </property>
- </widget>
- </item>
</layout>
</widget>
</item>
@@ -413,7 +406,6 @@
<tabstop>spinBoxDP</tabstop>
<tabstop>mEnableTopologicalEditingCheckBox</tabstop>
<tabstop>mAvoidIntersectionsPushButton</tabstop>
- <tabstop>mSnappingOptionsPushButton</tabstop>
<tabstop>cbxProjectionEnabled</tabstop>
<tabstop>twIdentifyLayers</tabstop>
<tabstop>tabWidget</tabstop>
Modified: trunk/qgis/src/ui/qgssnappingdialogbase.ui
===================================================================
--- trunk/qgis/src/ui/qgssnappingdialogbase.ui 2010-11-13 21:27:42 UTC (rev 14622)
+++ trunk/qgis/src/ui/qgssnappingdialogbase.ui 2010-11-13 22:00:10 UTC (rev 14623)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
<class>QgsSnappingDialogBase</class>
- <widget class="QDialog" name="QgsSnappingDialogBase" >
- <property name="geometry" >
+ <widget class="QDialog" name="QgsSnappingDialogBase">
+ <property name="geometry">
<rect>
<x>0</x>
<y>0</y>
@@ -9,59 +10,58 @@
<height>290</height>
</rect>
</property>
- <property name="windowTitle" >
+ <property name="windowTitle">
<string>Snapping options</string>
</property>
- <layout class="QGridLayout" >
- <property name="leftMargin" >
+ <layout class="QGridLayout">
+ <property name="margin">
<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" >
+ <property name="spacing">
<number>6</number>
</property>
- <property name="verticalSpacing" >
- <number>6</number>
- </property>
- <item row="0" column="0" >
- <widget class="QTreeWidget" name="mLayerTreeWidget" >
+ <item row="0" column="0">
+ <widget class="QTreeWidget" name="mLayerTreeWidget">
+ <property name="indentation">
+ <number>0</number>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
<column>
- <property name="text" >
+ <property name="text">
+ <string> </string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
<string>Layer</string>
</property>
</column>
<column>
- <property name="text" >
+ <property name="text">
<string>Mode</string>
</property>
</column>
<column>
- <property name="text" >
+ <property name="text">
<string>Tolerance</string>
</property>
</column>
<column>
- <property name="text" >
+ <property name="text">
<string>Units</string>
</property>
</column>
</widget>
</item>
- <item row="1" column="0" >
- <widget class="QDialogButtonBox" name="mButtonBox" >
- <property name="orientation" >
+ <item row="1" column="0">
+ <widget class="QDialogButtonBox" name="mButtonBox">
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="standardButtons" >
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
@@ -75,11 +75,11 @@
<receiver>QgsSnappingDialogBase</receiver>
<slot>accept()</slot>
<hints>
- <hint type="sourcelabel" >
+ <hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
- <hint type="destinationlabel" >
+ <hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
@@ -91,11 +91,11 @@
<receiver>QgsSnappingDialogBase</receiver>
<slot>reject()</slot>
<hints>
- <hint type="sourcelabel" >
+ <hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
- <hint type="destinationlabel" >
+ <hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
More information about the QGIS-commit
mailing list