|
QGIS API Documentation
master-59fd5e0
|
00001 /*************************************************************************** 00002 qgssinglesymbolrendererv2widget.cpp 00003 --------------------- 00004 begin : November 2009 00005 copyright : (C) 2009 by Martin Dobias 00006 email : wonder dot sk at gmail dot com 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 "qgssinglesymbolrendererv2widget.h" 00016 00017 #include "qgssinglesymbolrendererv2.h" 00018 #include "qgssymbolv2.h" 00019 00020 #include "qgslogger.h" 00021 #include "qgsvectorlayer.h" 00022 00023 #include "qgssymbolv2selectordialog.h" 00024 00025 #include <QMenu> 00026 00027 QgsRendererV2Widget* QgsSingleSymbolRendererV2Widget::create( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) 00028 { 00029 return new QgsSingleSymbolRendererV2Widget( layer, style, renderer ); 00030 } 00031 00032 QgsSingleSymbolRendererV2Widget::QgsSingleSymbolRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) 00033 : QgsRendererV2Widget( layer, style ) 00034 { 00035 // try to recognize the previous renderer 00036 // (null renderer means "no previous renderer") 00037 if ( !renderer || renderer->type() != "singleSymbol" ) 00038 { 00039 // we're not going to use it - so let's delete the renderer 00040 delete renderer; 00041 00042 // some default options 00043 QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol( mLayer->geometryType() ); 00044 00045 mRenderer = new QgsSingleSymbolRendererV2( symbol ); 00046 } 00047 else 00048 { 00049 mRenderer = static_cast<QgsSingleSymbolRendererV2*>( renderer ); 00050 } 00051 00052 // load symbol from it 00053 mSingleSymbol = mRenderer->symbol()->clone(); 00054 00055 // setup ui 00056 mSelector = new QgsSymbolV2SelectorDialog( mSingleSymbol, mStyle, mLayer, NULL, true ); 00057 connect( mSelector, SIGNAL( symbolModified() ), this, SLOT( changeSingleSymbol() ) ); 00058 00059 QVBoxLayout* layout = new QVBoxLayout; 00060 layout->setContentsMargins( 0, 0, 0, 0 ); 00061 layout->addWidget( mSelector ); 00062 setLayout( layout ); 00063 00064 // advanced actions - data defined rendering 00065 QMenu* advMenu = mSelector->advancedMenu(); 00066 00067 advMenu->addAction( tr( "Symbol levels..." ), this, SLOT( showSymbolLevels() ) ); 00068 00069 mDataDefinedMenus = new QgsRendererV2DataDefinedMenus( advMenu, mLayer->pendingFields(), 00070 mRenderer->rotationField(), mRenderer->sizeScaleField(), mRenderer->scaleMethod() ); 00071 connect( mDataDefinedMenus, SIGNAL( rotationFieldChanged( QString ) ), this, SLOT( rotationFieldChanged( QString ) ) ); 00072 connect( mDataDefinedMenus, SIGNAL( sizeScaleFieldChanged( QString ) ), this, SLOT( sizeScaleFieldChanged( QString ) ) ); 00073 connect( mDataDefinedMenus, SIGNAL( scaleMethodChanged( QgsSymbolV2::ScaleMethod ) ), this, SLOT( scaleMethodChanged( QgsSymbolV2::ScaleMethod ) ) ); 00074 } 00075 00076 QgsSingleSymbolRendererV2Widget::~QgsSingleSymbolRendererV2Widget() 00077 { 00078 delete mSingleSymbol; 00079 00080 delete mRenderer; 00081 00082 delete mSelector; 00083 } 00084 00085 00086 QgsFeatureRendererV2* QgsSingleSymbolRendererV2Widget::renderer() 00087 { 00088 return mRenderer; 00089 } 00090 00091 void QgsSingleSymbolRendererV2Widget::changeSingleSymbol() 00092 { 00093 // update symbol from the GUI 00094 mRenderer->setSymbol( mSingleSymbol->clone() ); 00095 } 00096 00097 void QgsSingleSymbolRendererV2Widget::rotationFieldChanged( QString fldName ) 00098 { 00099 mRenderer->setRotationField( fldName ); 00100 } 00101 00102 void QgsSingleSymbolRendererV2Widget::sizeScaleFieldChanged( QString fldName ) 00103 { 00104 mRenderer->setSizeScaleField( fldName ); 00105 } 00106 00107 void QgsSingleSymbolRendererV2Widget::scaleMethodChanged( QgsSymbolV2::ScaleMethod scaleMethod ) 00108 { 00109 mRenderer->setScaleMethod( scaleMethod ); 00110 } 00111 00112 void QgsSingleSymbolRendererV2Widget::showSymbolLevels() 00113 { 00114 showSymbolLevelsDialog( mRenderer ); 00115 }