mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
In the Identify results window, derived attributes such as Length or Area are now placed in a subtree of the attributes list called "(Derived)". This distinguishes them from explicit attributes that are a part of the user's layer.
If programmers wish to add more derived attributes in future, they can use the new QgsIdentifyResults::addDerivedAttribute() function. This commit should address trac ticket #100. git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@5592 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
parent
38dabe5830
commit
a343e6f052
@ -31,7 +31,9 @@
|
||||
QgsIdentifyResults::QgsIdentifyResults(const QgsAttributeAction& actions,
|
||||
QWidget *parent, Qt::WFlags f)
|
||||
: QDialog(parent, f),
|
||||
mActions(actions), mClickedOnValue(0), mActionPopup(0)
|
||||
mActions(actions),
|
||||
mClickedOnValue(0),
|
||||
mActionPopup(0)
|
||||
{
|
||||
setupUi(this);
|
||||
lstResults->setResizeMode(Q3ListView::AllColumns);
|
||||
@ -157,16 +159,41 @@ void QgsIdentifyResults::saveWindowLocation()
|
||||
settings.writeEntry("/Windows/Identify/w", s.width());
|
||||
settings.writeEntry("/Windows/Identify/h", s.height());
|
||||
}
|
||||
|
||||
/** add an attribute and its value to the list */
|
||||
void QgsIdentifyResults::addAttribute(Q3ListViewItem * fnode, QString field, QString value)
|
||||
{
|
||||
new Q3ListViewItem(fnode, field, value);
|
||||
}
|
||||
|
||||
void QgsIdentifyResults::addAttribute(QString field, QString value)
|
||||
{
|
||||
new Q3ListViewItem(lstResults, field, value);
|
||||
}
|
||||
|
||||
void QgsIdentifyResults::addDerivedAttribute(Q3ListViewItem * fnode, QString field, QString value)
|
||||
{
|
||||
// TODO: When we migrate this to a Qt4 QTreeViewWidget,
|
||||
// this should be added as italic text instead
|
||||
|
||||
Q3ListViewItem * daRootNode;
|
||||
|
||||
// Determine if this is the first derived attribute for this
|
||||
// feature or not
|
||||
if (mDerivedAttributeRootNodes.find(fnode) != mDerivedAttributeRootNodes.end())
|
||||
{
|
||||
// Reuse existing derived-attribute root node
|
||||
daRootNode = mDerivedAttributeRootNodes[fnode];
|
||||
}
|
||||
else
|
||||
{
|
||||
// Create new derived-attribute root node
|
||||
daRootNode = new Q3ListViewItem(fnode, tr("(Derived)"));
|
||||
}
|
||||
|
||||
new Q3ListViewItem(daRootNode, field, value);
|
||||
}
|
||||
|
||||
void QgsIdentifyResults::addAction(Q3ListViewItem * fnode, int id, QString field, QString value)
|
||||
{
|
||||
Q3ListViewItem *item = new Q3ListViewItem(fnode, field, value, "action", QString::number(id) );
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "qgsattributeaction.h"
|
||||
#include <QWidget>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
class QCloseEvent;
|
||||
class Q3ListViewItem;
|
||||
@ -43,11 +44,16 @@ class QgsIdentifyResults: public QDialog, private Ui::QgsIdentifyResultsBase
|
||||
QgsIdentifyResults(const QgsAttributeAction& actions, QWidget *parent = 0, Qt::WFlags f = 0);
|
||||
|
||||
~QgsIdentifyResults();
|
||||
|
||||
/** Add an attribute to the feature display node */
|
||||
void addAttribute(Q3ListViewItem *parent, QString field, QString value);
|
||||
|
||||
/** Add an attribute */
|
||||
void addAttribute(QString field, QString value);
|
||||
|
||||
/** Add a derived attribute (e.g. Length, Area) to the feature display node */
|
||||
void addDerivedAttribute(Q3ListViewItem *parent, QString field, QString value);
|
||||
|
||||
/** Add an action to the feature display node */
|
||||
void addAction(Q3ListViewItem *parent, int id, QString field, QString value);
|
||||
|
||||
@ -90,6 +96,15 @@ class QgsIdentifyResults: public QDialog, private Ui::QgsIdentifyResultsBase
|
||||
int mClickedOnValue;
|
||||
QMenu* mActionPopup;
|
||||
std::vector<std::pair<QString, QString> > mValues;
|
||||
|
||||
/**
|
||||
Keeps track of what derived-attribute (e.g. Length, Area)
|
||||
root nodes have been generated for each feature in this widget.
|
||||
|
||||
First item: Feature root node
|
||||
Second item: Derived-attribute root node for that feature
|
||||
*/
|
||||
std::map<Q3ListViewItem *, Q3ListViewItem *> mDerivedAttributeRootNodes;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -260,20 +260,21 @@ void QgsMapToolIdentify::identifyVectorLayer(QgsVectorLayer* layer, const QgsPoi
|
||||
mResults->addAttribute(featureNode, attr[i].fieldName(), attr[i].fieldValue());
|
||||
}
|
||||
|
||||
// measure distance or area
|
||||
// Calculate derived attributes and insert:
|
||||
// measure distance or area depending on geometry type
|
||||
if (layer->vectorType() == QGis::Line)
|
||||
{
|
||||
double dist = calc.measure(fet->geometry());
|
||||
QString str = QString::number(dist/1000, 'f', 3);
|
||||
str += " km";
|
||||
mResults->addAttribute(featureNode, ".Length", str);
|
||||
mResults->addDerivedAttribute(featureNode, QObject::tr("Length"), str);
|
||||
}
|
||||
else if (layer->vectorType() == QGis::Polygon)
|
||||
{
|
||||
double area = calc.measure(fet->geometry());
|
||||
QString str = QString::number(area/1000000, 'f', 3);
|
||||
str += " km2";
|
||||
mResults->addAttribute(featureNode, ".Area", str);
|
||||
str += " km^2";
|
||||
mResults->addDerivedAttribute(featureNode, QObject::tr("Area"), str);
|
||||
}
|
||||
|
||||
// Add actions
|
||||
|
Loading…
x
Reference in New Issue
Block a user