QGIS API Documentation  master-59fd5e0
src/gui/symbology-ng/qgsellipsesymbollayerv2widget.cpp
Go to the documentation of this file.
00001 /***************************************************************************
00002     qgsellipsesymbollayerv2widget.cpp
00003     ---------------------
00004     begin                : June 2011
00005     copyright            : (C) 2011 by Marco Hugentobler
00006     email                : marco dot hugentobler at sourcepole dot ch
00007  ***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU General Public License as published by  *
00011  *   the Free Software Foundation; either version 2 of the License, or     *
00012  *   (at your option) any later version.                                   *
00013  *                                                                         *
00014  ***************************************************************************/
00015 #include "qgsellipsesymbollayerv2widget.h"
00016 #include "qgsdatadefinedsymboldialog.h"
00017 #include "qgsellipsesymbollayerv2.h"
00018 #include "qgsmaplayerregistry.h"
00019 #include "qgsvectorlayer.h"
00020 #include <QColorDialog>
00021 
00022 QgsEllipseSymbolLayerV2Widget::QgsEllipseSymbolLayerV2Widget( const QgsVectorLayer* vl, QWidget* parent ): QgsSymbolLayerV2Widget( parent, vl )
00023 {
00024   setupUi( this );
00025   QStringList names;
00026   names << "circle" << "rectangle" << "cross" << "triangle";
00027   QSize iconSize = mShapeListWidget->iconSize();
00028 
00029   QStringList::const_iterator nameIt = names.constBegin();
00030   for ( ; nameIt != names.constEnd(); ++nameIt )
00031   {
00032     QgsEllipseSymbolLayerV2* lyr = new QgsEllipseSymbolLayerV2();
00033     lyr->setSymbolName( *nameIt );
00034     lyr->setOutlineColor( QColor( 0, 0, 0 ) );
00035     lyr->setFillColor( QColor( 200, 200, 200 ) );
00036     lyr->setSymbolWidth( 4 );
00037     lyr->setSymbolHeight( 2 );
00038     QIcon icon = QgsSymbolLayerV2Utils::symbolLayerPreviewIcon( lyr, QgsSymbolV2::MM, iconSize );
00039     QListWidgetItem* item = new QListWidgetItem( icon, "", mShapeListWidget );
00040     item->setToolTip( *nameIt );
00041     item->setData( Qt::UserRole, *nameIt );
00042     delete lyr;
00043   }
00044 
00045   connect( spinOffsetX, SIGNAL( valueChanged( double ) ), this, SLOT( setOffset() ) );
00046   connect( spinOffsetY, SIGNAL( valueChanged( double ) ), this, SLOT( setOffset() ) );
00047 }
00048 
00049 void QgsEllipseSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer )
00050 {
00051   if ( layer->layerType() != "EllipseMarker" )
00052   {
00053     return;
00054   }
00055 
00056   mLayer = static_cast<QgsEllipseSymbolLayerV2*>( layer );
00057   mWidthSpinBox->setValue( mLayer->symbolWidth() );
00058   mHeightSpinBox->setValue( mLayer->symbolHeight() );
00059   mRotationSpinBox->setValue( mLayer->angle() );
00060   mOutlineWidthSpinBox->setValue( mLayer->outlineWidth() );
00061 
00062   btnChangeColorBorder->setColor( mLayer->outlineColor() );
00063   btnChangeColorBorder->setColorDialogOptions( QColorDialog::ShowAlphaChannel );
00064   btnChangeColorFill->setColor( mLayer->fillColor() );
00065   btnChangeColorFill->setColorDialogOptions( QColorDialog::ShowAlphaChannel );
00066 
00067   QList<QListWidgetItem *> symbolItemList = mShapeListWidget->findItems( mLayer->symbolName(), Qt::MatchExactly );
00068   if ( symbolItemList.size() > 0 )
00069   {
00070     mShapeListWidget->setCurrentItem( symbolItemList.at( 0 ) );
00071   }
00072 
00073   //set combo entries to current values
00074   blockComboSignals( true );
00075   if ( mLayer )
00076   {
00077     mSymbolWidthUnitComboBox->setCurrentIndex( mLayer->symbolWidthUnit() );
00078     mOutlineWidthUnitComboBox->setCurrentIndex( mLayer->outlineWidthUnit() );
00079     mSymbolHeightUnitComboBox->setCurrentIndex( mLayer->symbolHeightUnit() );
00080   }
00081 
00082   QPointF offsetPt = mLayer->offset();
00083   spinOffsetX->setValue( offsetPt.x() );
00084   spinOffsetY->setValue( offsetPt.y() );
00085   blockComboSignals( false );
00086 }
00087 
00088 QgsSymbolLayerV2* QgsEllipseSymbolLayerV2Widget::symbolLayer()
00089 {
00090   return mLayer;
00091 }
00092 
00093 void QgsEllipseSymbolLayerV2Widget::on_mShapeListWidget_itemSelectionChanged()
00094 {
00095   if ( mLayer )
00096   {
00097     QListWidgetItem* item = mShapeListWidget->currentItem();
00098     if ( item )
00099     {
00100       mLayer->setSymbolName( item->data( Qt::UserRole ).toString() );
00101       emit changed();
00102     }
00103   }
00104 }
00105 
00106 void QgsEllipseSymbolLayerV2Widget::on_mWidthSpinBox_valueChanged( double d )
00107 {
00108   if ( mLayer )
00109   {
00110     mLayer->setSymbolWidth( d );
00111     emit changed();
00112   }
00113 }
00114 
00115 void QgsEllipseSymbolLayerV2Widget::on_mHeightSpinBox_valueChanged( double d )
00116 {
00117   if ( mLayer )
00118   {
00119     mLayer->setSymbolHeight( d );
00120     emit changed();
00121   }
00122 }
00123 
00124 void QgsEllipseSymbolLayerV2Widget::on_mRotationSpinBox_valueChanged( double d )
00125 {
00126   if ( mLayer )
00127   {
00128     mLayer->setAngle( d );
00129     emit changed();
00130   }
00131 }
00132 
00133 void QgsEllipseSymbolLayerV2Widget::on_mOutlineWidthSpinBox_valueChanged( double d )
00134 {
00135   if ( mLayer )
00136   {
00137     mLayer->setOutlineWidth( d );
00138     emit changed();
00139   }
00140 }
00141 
00142 void QgsEllipseSymbolLayerV2Widget::on_btnChangeColorBorder_colorChanged( const QColor& newColor )
00143 {
00144   if ( !mLayer )
00145   {
00146     return;
00147   }
00148 
00149   mLayer->setOutlineColor( newColor );
00150   emit changed();
00151 }
00152 
00153 void QgsEllipseSymbolLayerV2Widget::on_btnChangeColorFill_colorChanged( const QColor& newColor )
00154 {
00155   if ( !mLayer )
00156   {
00157     return;
00158   }
00159 
00160   mLayer->setFillColor( newColor );
00161   emit changed();
00162 }
00163 
00164 void QgsEllipseSymbolLayerV2Widget::on_mSymbolWidthUnitComboBox_currentIndexChanged( int index )
00165 {
00166   if ( mLayer )
00167   {
00168     mLayer->setSymbolWidthUnit(( QgsSymbolV2::OutputUnit ) index );
00169     emit changed();
00170   }
00171 }
00172 
00173 void QgsEllipseSymbolLayerV2Widget::on_mOutlineWidthUnitComboBox_currentIndexChanged( int index )
00174 {
00175   if ( mLayer )
00176   {
00177     mLayer->setOutlineWidthUnit(( QgsSymbolV2::OutputUnit ) index );
00178     emit changed();
00179   }
00180 }
00181 
00182 void QgsEllipseSymbolLayerV2Widget::on_mSymbolHeightUnitComboBox_currentIndexChanged( int index )
00183 {
00184   if ( mLayer )
00185   {
00186     mLayer->setSymbolHeightUnit(( QgsSymbolV2::OutputUnit ) index );
00187     emit changed();
00188   }
00189 }
00190 
00191 void QgsEllipseSymbolLayerV2Widget::on_mOffsetUnitComboBox_currentIndexChanged( int index )
00192 {
00193   if ( mLayer )
00194   {
00195     mLayer->setOffsetUnit(( QgsSymbolV2::OutputUnit ) index );
00196     emit changed();
00197   }
00198 }
00199 
00200 void QgsEllipseSymbolLayerV2Widget::blockComboSignals( bool block )
00201 {
00202   mSymbolWidthUnitComboBox->blockSignals( block );
00203   mOutlineWidthUnitComboBox->blockSignals( block );
00204   mSymbolHeightUnitComboBox->blockSignals( block );
00205 }
00206 
00207 void QgsEllipseSymbolLayerV2Widget::on_mDataDefinedPropertiesButton_clicked()
00208 {
00209   if ( !mLayer )
00210   {
00211     return;
00212   }
00213 
00214   QList< QgsDataDefinedSymbolDialog::DataDefinedSymbolEntry > dataDefinedProperties;
00215   dataDefinedProperties << QgsDataDefinedSymbolDialog::DataDefinedSymbolEntry( "width", tr( "Symbol width" ), mLayer->dataDefinedPropertyString( "width" ),
00216       QgsDataDefinedSymbolDialog::doubleHelpText() );
00217   dataDefinedProperties << QgsDataDefinedSymbolDialog::DataDefinedSymbolEntry( "height", tr( "Symbol height" ), mLayer->dataDefinedPropertyString( "height" ),
00218       QgsDataDefinedSymbolDialog::doubleHelpText() );
00219   dataDefinedProperties << QgsDataDefinedSymbolDialog::DataDefinedSymbolEntry( "rotation", tr( "Rotation" ), mLayer->dataDefinedPropertyString( "rotation" ),
00220       QgsDataDefinedSymbolDialog::doubleHelpText() );
00221   dataDefinedProperties << QgsDataDefinedSymbolDialog::DataDefinedSymbolEntry( "outline_width", tr( "Outline width" ), mLayer->dataDefinedPropertyString( "outline_width" ),
00222       QgsDataDefinedSymbolDialog::doubleHelpText() );
00223   dataDefinedProperties << QgsDataDefinedSymbolDialog::DataDefinedSymbolEntry( "fill_color", tr( "Fill color" ), mLayer->dataDefinedPropertyString( "fill_color" ),
00224       QgsDataDefinedSymbolDialog::colorHelpText() );
00225   dataDefinedProperties << QgsDataDefinedSymbolDialog::DataDefinedSymbolEntry( "outline_color", tr( "Border color" ), mLayer->dataDefinedPropertyString( "outline_color" ),
00226       QgsDataDefinedSymbolDialog::colorHelpText() );
00227   dataDefinedProperties << QgsDataDefinedSymbolDialog::DataDefinedSymbolEntry( "symbol_name", tr( "Symbol name" ), mLayer->dataDefinedPropertyString( "symbol_name" ),
00228       "'circle'|'rectangle'|'cross'|'triangle'" );
00229   dataDefinedProperties << QgsDataDefinedSymbolDialog::DataDefinedSymbolEntry( "offset", tr( "Offset" ), mLayer->dataDefinedPropertyString( "offset" ),
00230       QgsDataDefinedSymbolDialog::offsetHelpText() );
00231   QgsDataDefinedSymbolDialog d( dataDefinedProperties, mVectorLayer );
00232   if ( d.exec() == QDialog::Accepted )
00233   {
00234     //empty all existing properties first
00235     mLayer->removeDataDefinedProperties();
00236 
00237     QMap<QString, QString> properties = d.dataDefinedProperties();
00238     QMap<QString, QString>::const_iterator it = properties.constBegin();
00239     for ( ; it != properties.constEnd(); ++it )
00240     {
00241       if ( !it.value().isEmpty() )
00242       {
00243         mLayer->setDataDefinedProperty( it.key(), it.value() );
00244       }
00245     }
00246     emit changed();
00247   }
00248 }
00249 
00250 void QgsEllipseSymbolLayerV2Widget::setOffset()
00251 {
00252   mLayer->setOffset( QPointF( spinOffsetX->value(), spinOffsetY->value() ) );
00253   emit changed();
00254 }
00255 
00256 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines