1
/***************************************************************************
2
qgslinearlyscalingdialog.cpp - description
3
----------------------------
5
copyright : (C) 2007 by Marco Hugentobler
6
email : marco dot hugentobler at karto dot baug dot ethz dot ch
7
***************************************************************************/
9
/***************************************************************************
11
* This program is free software; you can redistribute it and/or modify *
12
* it under the terms of the GNU General Public License as published by *
13
* the Free Software Foundation; either version 2 of the License, or *
14
* (at your option) any later version. *
16
***************************************************************************/
18
#include "qgslinearlyscalingdialog.h"
19
#include "qgsdiagramrenderer.h"
20
#include "qgsvectordataprovider.h"
21
#include "qgsbardiagramfactory.h"
22
#include "qgspiediagramfactory.h"
24
QgsLinearlyScalingDialog::QgsLinearlyScalingDialog( QgsVectorLayer* vl ): QgsDiagramRendererWidget( vl )
27
QObject::connect( mFindMaximumValueButton, SIGNAL( clicked() ), this, SLOT( insertMaximumAttributeValue() ) );
28
mSizeUnitComboBox->addItem( tr( "Millimeter" ) );
29
mSizeUnitComboBox->addItem( tr( "Map units" ) );
32
QgsLinearlyScalingDialog::~QgsLinearlyScalingDialog()
37
QgsDiagramRenderer* QgsLinearlyScalingDialog::createRenderer( int classAttr, const QgsAttributeList& attributes ) const
39
//create a linearly scaling renderer
40
QList<int> attributesList;
41
attributesList.push_back( classAttr );
42
QgsDiagramRenderer* renderer = new QgsDiagramRenderer( attributesList );
44
//and items of renderer
45
QList<QgsDiagramItem> itemList;
46
QgsDiagramItem firstItem; firstItem.value = QVariant( 0.0 ); firstItem.size = 0;
47
QgsDiagramItem secondItem;
48
secondItem.value = QVariant( mValueLineEdit->text().toDouble() );
49
secondItem.size = mSizeSpinBox->value();
50
itemList.push_back( firstItem );
51
itemList.push_back( secondItem );
52
renderer->setDiagramItems( itemList );
53
renderer->setItemInterpretation( QgsDiagramRenderer::LINEAR );
58
void QgsLinearlyScalingDialog::applySettings( const QgsDiagramRenderer* renderer )
60
const QgsDiagramRenderer* linearRenderer = dynamic_cast<const QgsDiagramRenderer *>( renderer );
63
QList<QgsDiagramItem> itemList = linearRenderer->diagramItems();
64
QgsDiagramItem theItem = itemList.at( 1 ); //take the upper item
65
mValueLineEdit->setText( theItem.value.toString() );
66
mSizeSpinBox->setValue( theItem.size );
68
if ( linearRenderer->factory() )
70
QgsDiagramFactory::SizeUnit sizeUnit = linearRenderer->factory()->sizeUnit();
71
if ( sizeUnit == QgsDiagramFactory::MM )
73
mSizeUnitComboBox->setCurrentIndex( mSizeUnitComboBox->findText( tr( "Millimeter" ) ) );
75
else if ( sizeUnit == QgsDiagramFactory::MapUnits )
77
mSizeUnitComboBox->setCurrentIndex( mSizeUnitComboBox->findText( tr( "Map units" ) ) );
83
void QgsLinearlyScalingDialog::insertMaximumAttributeValue()
85
//find the maximum value for this attribute
88
QgsVectorDataProvider *provider = dynamic_cast<QgsVectorDataProvider *>( mVectorLayer->dataProvider() );
91
mValueLineEdit->setText( provider->maximumValue( mClassificationField ).toString() );
96
QgsDiagramFactory::SizeUnit QgsLinearlyScalingDialog::sizeUnit() const
98
if ( mSizeUnitComboBox->currentText() == tr( "Map units" ) )
100
return QgsDiagramFactory::MapUnits;
104
return QgsDiagramFactory::MM;