[QGIS Commit] r12191 - in trunk/qgis/src: app gui/symbology-ng ui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Thu Nov 19 08:13:47 EST 2009


Author: wonder
Date: 2009-11-19 08:13:42 -0500 (Thu, 19 Nov 2009)
New Revision: 12191

Modified:
   trunk/qgis/src/app/qgsvectorlayerproperties.cpp
   trunk/qgis/src/app/qgsvectorlayerproperties.h
   trunk/qgis/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
   trunk/qgis/src/gui/symbology-ng/qgsrendererv2propertiesdialog.h
   trunk/qgis/src/ui/qgsrendererv2propsdialogbase.ui
   trunk/qgis/src/ui/qgsvectorlayerpropertiesbase.ui
Log:
Vector layer properties dialog can convert layer to new/old symbology.
(there's no transfer of settings between old/new symbology)


Modified: trunk/qgis/src/app/qgsvectorlayerproperties.cpp
===================================================================
--- trunk/qgis/src/app/qgsvectorlayerproperties.cpp	2009-11-19 12:28:31 UTC (rev 12190)
+++ trunk/qgis/src/app/qgsvectorlayerproperties.cpp	2009-11-19 13:13:42 UTC (rev 12191)
@@ -56,6 +56,8 @@
 
 #include "qgsrendererv2propertiesdialog.h"
 #include "qgsstylev2.h"
+#include "qgssinglesymbolrenderer.h"
+#include "qgssinglesymbolrendererv2.h"
 
 #if QT_VERSION < 0x040300
 #define toPlainText() text()
@@ -95,6 +97,7 @@
   mToggleEditingButton->setIcon( QgisApp::getThemeIcon( "/mActionToggleEditing.png" ) );
   mCalculateFieldButton->setIcon( QgisApp::getThemeIcon( "/mActionCalculateField.png" ) );
 
+  connect( btnUseNewSymbology, SIGNAL( clicked() ), this, SLOT( useNewSymbology() ) );
 
   // Create the Label dialog tab
   QVBoxLayout *layout = new QVBoxLayout( labelOptionsFrame );
@@ -479,56 +482,9 @@
     }
   }
 
-  //find out the type of renderer in the vectorlayer, create a dialog with these settings and add it to the form
-  delete mRendererDialog;
-  mRendererDialog = 0;
+  // load appropriate symbology page (V1 or V2)
+  updateSymbologyPage();
 
-  if ( layer->isUsingRendererV2() )
-  {
-    mRendererDialog = new QgsRendererV2PropertiesDialog( layer, QgsStyleV2::defaultStyle(), true );
-
-    // hide unused widgets
-    legendtypecombobox->hide();
-    legendtypelabel->hide();
-    lblTransparencyPercent->hide();
-    sliderTransparency->hide();
-  }
-  else
-  {
-
-    QString rtype = layer->renderer()->name();
-    if ( rtype == "Single Symbol" )
-    {
-      mRendererDialog = new QgsSingleSymbolDialog( layer );
-      legendtypecombobox->setCurrentIndex( 0 );
-    }
-    else if ( rtype == "Graduated Symbol" )
-    {
-      mRendererDialog = new QgsGraduatedSymbolDialog( layer );
-      legendtypecombobox->setCurrentIndex( 1 );
-    }
-    else if ( rtype == "Continuous Color" )
-    {
-      mRendererDialog = new QgsContinuousColorDialog( layer );
-      legendtypecombobox->setCurrentIndex( 2 );
-    }
-    else if ( rtype == "Unique Value" )
-    {
-      mRendererDialog = new QgsUniqueValueDialog( layer );
-      legendtypecombobox->setCurrentIndex( 3 );
-    }
-
-    QObject::connect( legendtypecombobox, SIGNAL( activated( const QString & ) ), this,
-                      SLOT( alterLayerDialog( const QString & ) ) );
-
-  }
-
-  if ( mRendererDialog )
-  {
-    widgetStackRenderers->addWidget( mRendererDialog );
-    widgetStackRenderers->setCurrentWidget( mRendererDialog );
-  }
-
   // reset fields in label dialog
   layer->label()->setFields( layer->pendingFields() );
 
@@ -1136,3 +1092,96 @@
 
   return pluginList;
 }
+
+void QgsVectorLayerProperties::setUsingNewSymbology( bool useNewSymbology )
+{
+  if ( useNewSymbology )
+  {
+    layer->setUsingRendererV2( true );
+    layer->setRendererV2( QgsFeatureRendererV2::defaultRenderer( layer->geometryType() ) );
+    layer->setRenderer( NULL );
+  }
+  else
+  {
+    layer->setUsingRendererV2( false );
+    layer->setRendererV2( NULL );
+    layer->setRenderer( new QgsSingleSymbolRenderer( layer->geometryType() ) );
+  }
+
+  // update GUI!
+  updateSymbologyPage();
+}
+
+void QgsVectorLayerProperties::useNewSymbology()
+{
+  int res = QMessageBox::question( this, tr( "Symbology" ),
+                                   tr( "Do you wish to use original symbology implementation for this layer?" ),
+                                   QMessageBox::Yes | QMessageBox::No );
+
+  if ( res != QMessageBox::Yes )
+    return;
+
+  setUsingNewSymbology( true );
+}
+
+void QgsVectorLayerProperties::updateSymbologyPage()
+{
+
+  //find out the type of renderer in the vectorlayer, create a dialog with these settings and add it to the form
+  delete mRendererDialog;
+  mRendererDialog = 0;
+
+  bool v2 = layer->isUsingRendererV2();
+
+  // hide unused widgets
+  legendtypecombobox->setVisible( !v2 );
+  legendtypelabel->setVisible( !v2 );
+  lblTransparencyPercent->setVisible( !v2 );
+  sliderTransparency->setVisible( !v2 );
+  btnUseNewSymbology->setVisible( !v2 );
+
+  if ( v2 )
+  {
+    mRendererDialog = new QgsRendererV2PropertiesDialog( layer, QgsStyleV2::defaultStyle(), true );
+
+    connect( mRendererDialog, SIGNAL( useNewSymbology( bool ) ), this, SLOT( setUsingNewSymbology( bool ) ) );
+
+  }
+  else
+  {
+
+    QString rtype = layer->renderer()->name();
+    if ( rtype == "Single Symbol" )
+    {
+      mRendererDialog = new QgsSingleSymbolDialog( layer );
+      legendtypecombobox->setCurrentIndex( 0 );
+    }
+    else if ( rtype == "Graduated Symbol" )
+    {
+      mRendererDialog = new QgsGraduatedSymbolDialog( layer );
+      legendtypecombobox->setCurrentIndex( 1 );
+    }
+    else if ( rtype == "Continuous Color" )
+    {
+      mRendererDialog = new QgsContinuousColorDialog( layer );
+      legendtypecombobox->setCurrentIndex( 2 );
+    }
+    else if ( rtype == "Unique Value" )
+    {
+      mRendererDialog = new QgsUniqueValueDialog( layer );
+      legendtypecombobox->setCurrentIndex( 3 );
+    }
+
+    QObject::connect( legendtypecombobox, SIGNAL( activated( const QString & ) ), this,
+                      SLOT( alterLayerDialog( const QString & ) ) );
+
+  }
+
+  if ( mRendererDialog )
+  {
+    widgetStackRenderers->addWidget( mRendererDialog );
+    widgetStackRenderers->setCurrentWidget( mRendererDialog );
+  }
+
+
+}

Modified: trunk/qgis/src/app/qgsvectorlayerproperties.h
===================================================================
--- trunk/qgis/src/app/qgsvectorlayerproperties.h	2009-11-19 12:28:31 UTC (rev 12190)
+++ trunk/qgis/src/app/qgsvectorlayerproperties.h	2009-11-19 13:13:42 UTC (rev 12191)
@@ -112,6 +112,9 @@
     void attributeAdded( int idx );
     void attributeDeleted( int idx );
 
+    void useNewSymbology();
+    void setUsingNewSymbology( bool useNewSymbology );
+
   signals:
 
     /** emitted when changes to layer were saved to update legend */
@@ -120,6 +123,9 @@
     void toggleEditing( QgsMapLayer * );
 
   protected:
+
+    void updateSymbologyPage();
+
     enum attrColumns
     {
       attrIdCol = 0,

Modified: trunk/qgis/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
===================================================================
--- trunk/qgis/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp	2009-11-19 12:28:31 UTC (rev 12190)
+++ trunk/qgis/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp	2009-11-19 13:13:42 UTC (rev 12191)
@@ -16,64 +16,65 @@
 #include "qgsvectorlayer.h"
 
 #include <QKeyEvent>
+#include <QMessageBox>
 
-
-QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog(QgsVectorLayer* layer, QgsStyleV2* style, bool embedded)
-    : mLayer(layer), mStyle(style), mActiveWidget(NULL)
+QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog( QgsVectorLayer* layer, QgsStyleV2* style, bool embedded )
+    : mLayer( layer ), mStyle( style ), mActiveWidget( NULL )
 {
-  setupUi(this);
+  setupUi( this );
 
   // can be embedded in vector layer properties
-  if (embedded)
+  if ( embedded )
   {
     buttonBox->hide();
-    layout()->setContentsMargins(0,0,0,0);
+    layout()->setContentsMargins( 0, 0, 0, 0 );
   }
 
-  connect(buttonBox, SIGNAL(accepted()), this, SLOT(onOK()));
-  connect(btnSymbolLevels, SIGNAL(clicked()), this, SLOT(showSymbolLevels()));
+  connect( buttonBox, SIGNAL( accepted() ), this, SLOT( onOK() ) );
+  connect( btnSymbolLevels, SIGNAL( clicked() ), this, SLOT( showSymbolLevels() ) );
+  connect( btnOldSymbology, SIGNAL( clicked() ), this, SLOT( useOldSymbology() ) );
 
   // initialize registry's widget functions
   QgsRendererV2Registry* reg = QgsRendererV2Registry::instance();
-  if (reg->rendererMetadata("singleSymbol").widgetFunction() == NULL)
+  if ( reg->rendererMetadata( "singleSymbol" ).widgetFunction() == NULL )
   {
-    reg->setRendererWidgetFunction("singleSymbol", QgsSingleSymbolRendererV2Widget::create);
-    reg->setRendererWidgetFunction("categorizedSymbol", QgsCategorizedSymbolRendererV2Widget::create);
-    reg->setRendererWidgetFunction("graduatedSymbol", QgsGraduatedSymbolRendererV2Widget::create);
+    reg->setRendererWidgetFunction( "singleSymbol", QgsSingleSymbolRendererV2Widget::create );
+    reg->setRendererWidgetFunction( "categorizedSymbol", QgsCategorizedSymbolRendererV2Widget::create );
+    reg->setRendererWidgetFunction( "graduatedSymbol", QgsGraduatedSymbolRendererV2Widget::create );
   }
 
   QPixmap pix;
   QStringList renderers = reg->renderersList();
-  foreach (QString name, renderers)
+  foreach( QString name, renderers )
   {
-    QgsRendererV2Metadata m = reg->rendererMetadata(name);
+    QgsRendererV2Metadata m = reg->rendererMetadata( name );
 
     QString iconPath = QgsApplication::defaultThemePath() + m.iconName();
-    if (!pix.load(iconPath, "png"))
+    if ( !pix.load( iconPath, "png" ) )
       pix = QPixmap();
 
-    cboRenderers->addItem(QIcon(pix), m.visibleName(), name);
+    cboRenderers->addItem( QIcon( pix ), m.visibleName(), name );
   }
 
-  cboRenderers->setCurrentIndex(-1); // set no current renderer
+  cboRenderers->setCurrentIndex( -1 ); // set no current renderer
 
   // if the layer doesn't use renderer V2, let's start using it!
-  if (!mLayer->isUsingRendererV2())
+  if ( !mLayer->isUsingRendererV2() )
   {
-    mLayer->setRendererV2( QgsFeatureRendererV2::defaultRenderer(mLayer->geometryType()) );
-    mLayer->setUsingRendererV2(true);
+    mLayer->setRendererV2( QgsFeatureRendererV2::defaultRenderer( mLayer->geometryType() ) );
+    mLayer->setUsingRendererV2( true );
   }
 
   // setup slot rendererChanged()
-  connect(cboRenderers, SIGNAL(currentIndexChanged(int)), this, SLOT(rendererChanged()));
+  connect( cboRenderers, SIGNAL( currentIndexChanged( int ) ), this, SLOT( rendererChanged() ) );
 
   // set current renderer from layer
   QString rendererName = mLayer->rendererV2()->type();
-  for (int i = 0; i < cboRenderers->count(); i++)
+  for ( int i = 0; i < cboRenderers->count(); i++ )
   {
-    if (cboRenderers->itemData(i).toString() == rendererName)
+    if ( cboRenderers->itemData( i ).toString() == rendererName )
     {
-      cboRenderers->setCurrentIndex(i);
+      cboRenderers->setCurrentIndex( i );
       return;
     }
   }
@@ -87,16 +88,16 @@
 void QgsRendererV2PropertiesDialog::rendererChanged()
 {
 
-  if (cboRenderers->currentIndex() == -1)
+  if ( cboRenderers->currentIndex() == -1 )
   {
-    QgsDebugMsg("No current item -- this should never happen!");
+    QgsDebugMsg( "No current item -- this should never happen!" );
     return;
   }
 
   QString rendererName = cboRenderers->itemData( cboRenderers->currentIndex() ).toString();
 
   // get rid of old active widget (if any)
-  if (mActiveWidget)
+  if ( mActiveWidget )
   {
     stackedWidget->removeWidget( mActiveWidget );
 
@@ -104,30 +105,30 @@
     mActiveWidget = NULL;
   }
 
-  QgsRendererV2Metadata m = QgsRendererV2Registry::instance()->rendererMetadata(rendererName);
+  QgsRendererV2Metadata m = QgsRendererV2Registry::instance()->rendererMetadata( rendererName );
   QgsRendererV2WidgetFunc fWidget = m.widgetFunction();
-  if (fWidget != NULL)
+  if ( fWidget != NULL )
   {
     // instantiate the widget and set as active
-    mActiveWidget = fWidget(mLayer, mStyle, mLayer->rendererV2()->clone());
-    stackedWidget->addWidget(mActiveWidget);
-    stackedWidget->setCurrentWidget(mActiveWidget);
+    mActiveWidget = fWidget( mLayer, mStyle, mLayer->rendererV2()->clone() );
+    stackedWidget->addWidget( mActiveWidget );
+    stackedWidget->setCurrentWidget( mActiveWidget );
 
-    btnSymbolLevels->setEnabled(true);
+    btnSymbolLevels->setEnabled( true );
   }
   else
   {
     // set default "no edit widget available" page
-    stackedWidget->setCurrentWidget(pageNoWidget);
+    stackedWidget->setCurrentWidget( pageNoWidget );
 
-    btnSymbolLevels->setEnabled(false);
+    btnSymbolLevels->setEnabled( false );
   }
 
 }
 
 void QgsRendererV2PropertiesDialog::apply()
 {
-  if (mActiveWidget != NULL)
+  if ( mActiveWidget != NULL )
   {
     mLayer->setRendererV2( mActiveWidget->renderer()->clone() );
   }
@@ -149,22 +150,34 @@
   }
   else
   {
-    QDialog::keyPressEvent(e);
+    QDialog::keyPressEvent( e );
   }
 }
 
 
 void QgsRendererV2PropertiesDialog::showSymbolLevels()
 {
-  if (!mActiveWidget)
+  if ( !mActiveWidget )
     return;
 
   QgsFeatureRendererV2* r = mActiveWidget->renderer();
   QgsSymbolV2List symbols = r->symbols();
 
-  QgsSymbolLevelsV2Dialog dlg(symbols, r->usingSymbolLevels(), this);
-  if (dlg.exec())
+  QgsSymbolLevelsV2Dialog dlg( symbols, r->usingSymbolLevels(), this );
+  if ( dlg.exec() )
   {
     r->setUsingSymbolLevels( dlg.usingLevels() );
   }
 }
+
+void QgsRendererV2PropertiesDialog::useOldSymbology()
+{
+  int res = QMessageBox::question( this, tr( "Symbology" ),
+                                   tr( "Do you wish to use original symbology implementation for this layer?" ),
+                                   QMessageBox::Yes | QMessageBox::No );
+
+  if ( res != QMessageBox::Yes )
+    return;
+
+  emit useNewSymbology( false );
+}

Modified: trunk/qgis/src/gui/symbology-ng/qgsrendererv2propertiesdialog.h
===================================================================
--- trunk/qgis/src/gui/symbology-ng/qgsrendererv2propertiesdialog.h	2009-11-19 12:28:31 UTC (rev 12190)
+++ trunk/qgis/src/gui/symbology-ng/qgsrendererv2propertiesdialog.h	2009-11-19 13:13:42 UTC (rev 12191)
@@ -30,6 +30,11 @@
 
     void showSymbolLevels();
 
+    void useOldSymbology();
+
+  signals:
+    void useNewSymbology( bool );
+
   protected:
 
     //! Reimplements dialog keyPress event so we can ignore it

Modified: trunk/qgis/src/ui/qgsrendererv2propsdialogbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsrendererv2propsdialogbase.ui	2009-11-19 12:28:31 UTC (rev 12190)
+++ trunk/qgis/src/ui/qgsrendererv2propsdialogbase.ui	2009-11-19 13:13:42 UTC (rev 12191)
@@ -46,6 +46,13 @@
        </property>
       </widget>
      </item>
+     <item>
+      <widget class="QPushButton" name="btnOldSymbology">
+       <property name="text">
+        <string>Old symbology</string>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>

Modified: trunk/qgis/src/ui/qgsvectorlayerpropertiesbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsvectorlayerpropertiesbase.ui	2009-11-19 12:28:31 UTC (rev 12190)
+++ trunk/qgis/src/ui/qgsvectorlayerpropertiesbase.ui	2009-11-19 13:13:42 UTC (rev 12191)
@@ -157,7 +157,7 @@
          </property>
         </widget>
        </item>
-       <item row="1" column="0" colspan="4">
+       <item row="1" column="0" colspan="5">
         <widget class="QStackedWidget" name="widgetStackRenderers">
          <property name="sizePolicy">
           <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
@@ -178,6 +178,13 @@
          <widget class="QWidget" name="page_2"/>
         </widget>
        </item>
+       <item row="0" column="4">
+        <widget class="QPushButton" name="btnUseNewSymbology">
+         <property name="text">
+          <string>New symbology</string>
+         </property>
+        </widget>
+       </item>
       </layout>
      </widget>
      <widget class="QWidget" name="page_4">
@@ -348,8 +355,8 @@
            <rect>
             <x>0</x>
             <y>0</y>
-            <width>555</width>
-            <height>401</height>
+            <width>407</width>
+            <height>394</height>
            </rect>
           </property>
           <layout class="QGridLayout" name="gridLayout_3">



More information about the QGIS-commit mailing list