-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Forgot to add two files in last commit
git-svn-id: http://svn.osgeo.org/qgis/trunk@14698 c8812cc2-4d05-0410-92ff-de0c093fc19c
- Loading branch information
mhugent
committed
Nov 17, 2010
1 parent
ac51927
commit 3e3fb35
Showing
2 changed files
with
393 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,314 @@ | ||
/*************************************************************************** | ||
qgslabelpropertydialog.cpp | ||
-------------------------- | ||
begin : 2010-11-12 | ||
copyright : (C) 2010 by Marco Hugentobler | ||
email : marco dot hugentobler at sourcepole dot ch | ||
***************************************************************************/ | ||
|
||
/*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
#include "qgslabelpropertydialog.h" | ||
#include "qgsmaplayerregistry.h" | ||
#include "qgsmaprenderer.h" | ||
#include <QColorDialog> | ||
#include <QFontDialog> | ||
|
||
QgsLabelPropertyDialog::QgsLabelPropertyDialog( const QString& layerId, int featureId, QgsMapRenderer* renderer, QWidget * parent, Qt::WindowFlags f ): | ||
QDialog( parent, f ), mMapRenderer( renderer ), mCurrentLabelField( -1 ) | ||
{ | ||
setupUi( this ); | ||
fillHaliComboBox(); | ||
fillValiComboBox(); | ||
init( layerId, featureId ); | ||
} | ||
|
||
QgsLabelPropertyDialog::~QgsLabelPropertyDialog() | ||
{ | ||
} | ||
|
||
void QgsLabelPropertyDialog::init( const QString& layerId, int featureId ) | ||
{ | ||
if( !mMapRenderer ) | ||
{ | ||
return; | ||
} | ||
|
||
//get feature attributes | ||
QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( layerId ) ); | ||
if( !vlayer ) | ||
{ | ||
return; | ||
} | ||
|
||
QgsFeature f; | ||
if( !vlayer->featureAtId( featureId, f, false, true ) ) | ||
{ | ||
return; | ||
} | ||
const QgsAttributeMap& attributeValues = f.attributeMap(); | ||
QgsAttributeMap::const_iterator attIt = attributeValues.constBegin(); | ||
|
||
//get layerproperties. Problem: only for pallabeling... | ||
QgsPalLabeling* lbl = dynamic_cast<QgsPalLabeling*>( mMapRenderer->labelingEngine() ); | ||
if( !lbl ) | ||
{ | ||
return; | ||
} | ||
|
||
blockElementSignals( true ); | ||
|
||
//get label field and fill line edit | ||
QString labelFieldName = vlayer->customProperty( "labeling/fieldName" ).toString(); | ||
if( !labelFieldName.isEmpty() ) | ||
{ | ||
mCurrentLabelField = vlayer->fieldNameIndex( labelFieldName ); | ||
mLabelTextLineEdit->setText( attributeValues[mCurrentLabelField].toString() ); | ||
const QgsFieldMap& layerFields = vlayer->pendingFields(); | ||
switch( layerFields[mCurrentLabelField].type() ) | ||
{ | ||
case QVariant::Double: | ||
mLabelTextLineEdit->setValidator( new QDoubleValidator( this ) ); | ||
break; | ||
case QVariant::Int: | ||
case QVariant::UInt: | ||
case QVariant::LongLong: | ||
mLabelTextLineEdit->setValidator( new QIntValidator( this ) ); | ||
break; | ||
} | ||
} | ||
|
||
//get attributes of the feature and fill data defined values | ||
QgsPalLayerSettings& layerSettings = lbl->layer( layerId ); | ||
mLabelFont = layerSettings.textFont; | ||
|
||
//set all the gui elements to the default values | ||
mFontSizeSpinBox->setValue( layerSettings.textFont.pointSizeF() ); | ||
mBufferColorButton->setColor( layerSettings.textColor ); | ||
mLabelDistanceSpinBox->setValue( layerSettings.dist ); | ||
mBufferSizeSpinBox->setValue( layerSettings.bufferSize ); | ||
mHaliComboBox->setCurrentIndex( mHaliComboBox->findText("Left") ); | ||
mValiComboBox->setCurrentIndex( mValiComboBox->findText("Bottom") ); | ||
|
||
disableGuiElements(); | ||
|
||
mDataDefinedProperties = layerSettings.dataDefinedProperties; | ||
QMap< QgsPalLayerSettings::DataDefinedProperties, int >::const_iterator propIt = mDataDefinedProperties.constBegin(); | ||
|
||
for(; propIt != mDataDefinedProperties.constEnd(); ++propIt ) | ||
{ | ||
switch( propIt.key() ) | ||
{ | ||
case QgsPalLayerSettings::Size: | ||
mFontSizeSpinBox->setEnabled( true ); | ||
mLabelFont.setPointSizeF( attributeValues[propIt.value()].toDouble() ); | ||
mFontSizeSpinBox->setValue( attributeValues[propIt.value()].toDouble() ); | ||
break; | ||
case QgsPalLayerSettings::BufferSize: | ||
mBufferSizeSpinBox->setEnabled( true ); | ||
mBufferSizeSpinBox->setValue( attributeValues[propIt.value()].toDouble() ); | ||
break; | ||
case QgsPalLayerSettings::PositionX: | ||
mXCoordSpinBox->setEnabled( true ); | ||
mXCoordSpinBox->setValue( attributeValues[propIt.value()].toDouble() ); | ||
break; | ||
case QgsPalLayerSettings::PositionY: | ||
mYCoordSpinBox->setEnabled( true ); | ||
mYCoordSpinBox->setValue( attributeValues[propIt.value()].toDouble() ); | ||
break; | ||
case QgsPalLayerSettings::LabelDistance: | ||
mLabelDistanceSpinBox->setEnabled( true ); | ||
mLabelDistanceSpinBox->setValue( attributeValues[propIt.value()].toDouble() ); | ||
break; | ||
case QgsPalLayerSettings::Hali: | ||
mHaliComboBox->setEnabled( true ); | ||
mHaliComboBox->setCurrentIndex( mHaliComboBox->findText( attributeValues[propIt.value()].toString() ) ); | ||
break; | ||
case QgsPalLayerSettings::Vali: | ||
mValiComboBox->setEnabled( true ); | ||
mValiComboBox->setCurrentIndex( mValiComboBox->findText( attributeValues[propIt.value()].toString() ) ); | ||
break; | ||
case QgsPalLayerSettings::BufferColor: | ||
mBufferColorButton->setEnabled( true ); | ||
mBufferColorButton->setColor( QColor( attributeValues[propIt.value()].toString() ) ); | ||
break; | ||
case QgsPalLayerSettings::Color: | ||
mFontColorButton->setEnabled( true ); | ||
mFontColorButton->setColor( QColor( attributeValues[propIt.value()].toString() ) ); | ||
break; | ||
case QgsPalLayerSettings::Rotation: | ||
mRotationSpinBox->setEnabled( true ); | ||
mRotationSpinBox->setValue( attributeValues[propIt.value()].toDouble() ); | ||
break; | ||
|
||
//font related properties | ||
case QgsPalLayerSettings::Bold: | ||
mLabelFont.setBold( attributeValues[propIt.value()].toBool() ); | ||
break; | ||
case QgsPalLayerSettings::Italic: | ||
mLabelFont.setItalic( attributeValues[propIt.value()].toBool() ); | ||
break; | ||
case QgsPalLayerSettings::Underline: | ||
mLabelFont.setUnderline( attributeValues[propIt.value()].toBool() ); | ||
break; | ||
case QgsPalLayerSettings::Strikeout: | ||
mLabelFont.setStrikeOut( attributeValues[propIt.value()].toBool() ); | ||
break; | ||
case QgsPalLayerSettings::Family: | ||
mLabelFont.setFamily( attributeValues[propIt.value()].toString() ); | ||
break; | ||
} | ||
} | ||
mFontPushButton->setEnabled( labelFontEditingPossible() ); | ||
blockElementSignals( false ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::disableGuiElements() | ||
{ | ||
mFontSizeSpinBox->setEnabled( false ); | ||
mBufferSizeSpinBox->setEnabled( false ); | ||
mFontPushButton->setEnabled( false ); | ||
mFontColorButton->setEnabled( false ); | ||
mBufferColorButton->setEnabled( false ); | ||
mLabelDistanceSpinBox->setEnabled( false ); | ||
mXCoordSpinBox->setEnabled( false ); | ||
mYCoordSpinBox->setEnabled( false ); | ||
mHaliComboBox->setEnabled( false ); | ||
mValiComboBox->setEnabled( false ); | ||
mRotationSpinBox->setEnabled( false ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::blockElementSignals( bool block ) | ||
{ | ||
mFontSizeSpinBox->blockSignals( block ); | ||
mBufferSizeSpinBox->blockSignals( block ); | ||
mFontPushButton->blockSignals( block ); | ||
mBufferColorButton->blockSignals( block ); | ||
mLabelDistanceSpinBox->blockSignals( block ); | ||
mXCoordSpinBox->blockSignals( block ); | ||
mYCoordSpinBox->blockSignals( block ); | ||
mHaliComboBox->blockSignals( block ); | ||
mValiComboBox->blockSignals( block ); | ||
mRotationSpinBox->blockSignals( block ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::fillHaliComboBox() | ||
{ | ||
mHaliComboBox->addItem( "Left" ); | ||
mHaliComboBox->addItem( "Center" ); | ||
mHaliComboBox->addItem( "Right" ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::fillValiComboBox() | ||
{ | ||
mValiComboBox->addItem( "Bottom" ); | ||
mValiComboBox->addItem( "Base" ); | ||
mValiComboBox->addItem( "Half" ); | ||
mValiComboBox->addItem( "Top" ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mLabelDistanceSpinBox_valueChanged( double d ) | ||
{ | ||
|
||
} | ||
|
||
void QgsLabelPropertyDialog::on_mXCoordSpinBox_valueChanged( double d ) | ||
{ | ||
insertChangedValue( QgsPalLayerSettings::PositionX, d ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mYCoordSpinBox_valueChanged( double d ) | ||
{ | ||
insertChangedValue( QgsPalLayerSettings::PositionY, d ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mFontSizeSpinBox_valueChanged( double d ) | ||
{ | ||
insertChangedValue( QgsPalLayerSettings::Size, d ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mBufferSizeSpinBox_valueChanged( double d ) | ||
{ | ||
insertChangedValue( QgsPalLayerSettings::PositionX, d ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mRotationSpinBox_valueChanged( double d ) | ||
{ | ||
insertChangedValue( QgsPalLayerSettings::Rotation, d ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mFontPushButton_clicked() | ||
{ | ||
bool ok; | ||
mLabelFont = QFontDialog::getFont( &ok, mLabelFont, 0, tr("Label font") ); | ||
if( ok ) | ||
{ | ||
insertChangedValue( QgsPalLayerSettings::Size, mLabelFont.pointSizeF() ); | ||
insertChangedValue( QgsPalLayerSettings::Bold, mLabelFont.bold() ); | ||
insertChangedValue( QgsPalLayerSettings::Italic, mLabelFont.italic() ); | ||
insertChangedValue( QgsPalLayerSettings::Underline, mLabelFont.underline() ); | ||
} | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mFontColorButton_clicked() | ||
{ | ||
QColor c = QColorDialog::getColor ( mFontColorButton->color(), 0, tr("Font color"), QColorDialog::ShowAlphaChannel ); | ||
if( c.isValid() ) | ||
{ | ||
mFontColorButton->setColor( c ); | ||
insertChangedValue( QgsPalLayerSettings::Color, c.name() ); | ||
} | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mBufferColorButton_clicked() | ||
{ | ||
QColor c = QColorDialog::getColor ( mBufferColorButton->color(), 0, tr("Buffer color"), QColorDialog::ShowAlphaChannel ); | ||
if( c.isValid() ) | ||
{ | ||
mFontColorButton->setColor( c ); | ||
insertChangedValue( QgsPalLayerSettings::BufferColor, c.name() ); | ||
} | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mHaliComboBox_currentIndexChanged( const QString& text ) | ||
{ | ||
insertChangedValue( QgsPalLayerSettings::Hali, text ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mValiComboBox_currentIndexChanged( const QString& text ) | ||
{ | ||
insertChangedValue( QgsPalLayerSettings::Vali, text ); | ||
} | ||
|
||
void QgsLabelPropertyDialog::on_mLabelTextLineEdit_textChanged ( const QString& text ) | ||
{ | ||
if( mCurrentLabelField != -1 ) | ||
{ | ||
mChangedProperties.insert( mCurrentLabelField, text ); | ||
} | ||
} | ||
|
||
void QgsLabelPropertyDialog::insertChangedValue( QgsPalLayerSettings::DataDefinedProperties p, QVariant value ) | ||
{ | ||
QMap< QgsPalLayerSettings::DataDefinedProperties, int >::const_iterator ddIt = mDataDefinedProperties.find( p ); | ||
if( ddIt != mDataDefinedProperties.constEnd() ) | ||
{ | ||
mChangedProperties.insert( ddIt.value(), value ); | ||
} | ||
} | ||
|
||
bool QgsLabelPropertyDialog::labelFontEditingPossible() const | ||
{ | ||
return( mDataDefinedProperties.contains( QgsPalLayerSettings:: Size ) || mDataDefinedProperties.contains( QgsPalLayerSettings::Bold ) | ||
|| mDataDefinedProperties.contains( QgsPalLayerSettings::Italic ) || mDataDefinedProperties.contains( QgsPalLayerSettings::Underline ) | ||
|| mDataDefinedProperties.contains( QgsPalLayerSettings::Strikeout ) | ||
|| mDataDefinedProperties.contains( QgsPalLayerSettings::Family ) ); | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
/*************************************************************************** | ||
qgslabelpropertydialog.h | ||
------------------------ | ||
begin : 2010-11-12 | ||
copyright : (C) 2010 by Marco Hugentobler | ||
email : marco dot hugentobler at sourcepole dot ch | ||
***************************************************************************/ | ||
|
||
/*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
#ifndef QGSLABELPROPERTYDIALOG_H | ||
#define QGSLABELPROPERTYDIALOG_H | ||
|
||
#include "ui_qgslabelpropertydialogbase.h" | ||
#include "qgsfeature.h" | ||
#include "qgspallabeling.h" | ||
#include <QDialog> | ||
|
||
class QgsMapRenderer; | ||
|
||
/**A dialog to enter data defined label attributes*/ | ||
class QgsLabelPropertyDialog: public QDialog, private Ui::QgsLabelPropertyDialogBase | ||
{ | ||
Q_OBJECT | ||
public: | ||
QgsLabelPropertyDialog( const QString& layerId, int featureId, QgsMapRenderer* renderer, QWidget * parent = 0, Qt::WindowFlags f = 0 ); | ||
~QgsLabelPropertyDialog(); | ||
|
||
/**Returns properties changed by the user*/ | ||
const QgsAttributeMap& changedProperties() const { return mChangedProperties; } | ||
|
||
private slots: | ||
void on_mLabelDistanceSpinBox_valueChanged( double d ); | ||
void on_mXCoordSpinBox_valueChanged( double d ); | ||
void on_mYCoordSpinBox_valueChanged( double d ); | ||
void on_mFontSizeSpinBox_valueChanged( double d ); | ||
void on_mBufferSizeSpinBox_valueChanged( double d ); | ||
void on_mRotationSpinBox_valueChanged( double d ); | ||
void on_mFontPushButton_clicked(); | ||
void on_mFontColorButton_clicked(); | ||
void on_mBufferColorButton_clicked(); | ||
void on_mHaliComboBox_currentIndexChanged( const QString& text ); | ||
void on_mValiComboBox_currentIndexChanged( const QString& text ); | ||
void on_mLabelTextLineEdit_textChanged ( const QString& text ); | ||
|
||
private: | ||
/**Sets activation / values to the gui elements depending on the label settings and feature values*/ | ||
void init( const QString& layerId, int featureId ); | ||
void disableGuiElements(); | ||
/**Block / unblock all input element signals*/ | ||
void blockElementSignals( bool block ); | ||
|
||
void fillHaliComboBox(); | ||
void fillValiComboBox(); | ||
|
||
/**Insert changed value into mChangedProperties*/ | ||
void insertChangedValue( QgsPalLayerSettings::DataDefinedProperties p, QVariant value ); | ||
|
||
/**Returns true if any font related setting is contained in mDataDefinedProperties*/ | ||
bool labelFontEditingPossible() const; | ||
|
||
QgsMapRenderer* mMapRenderer; | ||
|
||
QgsAttributeMap mChangedProperties; | ||
QMap< QgsPalLayerSettings::DataDefinedProperties, int > mDataDefinedProperties; | ||
QFont mLabelFont; | ||
|
||
/**Label field for the current layer (or -1 if none)*/ | ||
int mCurrentLabelField; | ||
}; | ||
|
||
#endif // QGSLAYERPROPERTYDIALOG_H |