|
QGIS API Documentation
master-59fd5e0
|
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