7#include "OsmRelationManagerWidget.h"
8#include "OsmRelationManagerWidget_p.h"
9#include "ui_OsmRelationManagerWidget.h"
18#include "GeoDataPlacemark.h"
19#include "GeoDataGeometry.h"
20#include "osm/OsmPlacemarkData.h"
21#include "osm/OsmObjectManager.h"
22#include "osm/OsmRelationEditorDialog.h"
27OsmRelationManagerWidget::OsmRelationManagerWidget( GeoDataPlacemark *placemark,
31 d( new OsmRelationManagerWidgetPrivate )
33 d->m_placemark = placemark;
34 d->m_allRelations = relations;
36 d->populateRelationsList();
37 d->m_relationDropMenu =
new QMenu( d->m_addRelation );
38 d->m_currentRelations->setRootIsDecorated(
false );
41 d->m_currentRelations->setMinimumWidth( d->m_currentRelations->columnCount() * d->m_currentRelations->columnWidth( 0 ) + 10 );
43 d->m_addRelation->setMenu( d->m_relationDropMenu );
44 d->populateDropMenu();
49 this, SLOT(handleRelationContextMenuRequest(
QPoint)) );
51 this, SLOT(addRelation(
QAction*)) );
56OsmRelationManagerWidget::~OsmRelationManagerWidget()
61void OsmRelationManagerWidget::addRelation(
QAction *relationAction )
66 if ( relationText == tr(
"New Relation" ) ) {
69 const int result = relationEditor->exec();
70 delete relationEditor;
76 newRelationItem->
setText(Column::Name, relationData.
tagValue(QStringLiteral(
"name")));
77 newRelationItem->
setText(Column::Type, relationData.
tagValue(QStringLiteral(
"type")));
79 d->m_currentRelations->addTopLevelItem( newRelationItem );
83 d->m_currentRelations->editItem( newRelationItem, Column::Role );
86 emit relationCreated( relationData );
92 newRelationItem->
setText(Column::Name, relationData.
tagValue(QStringLiteral(
"name")));
93 newRelationItem->
setText(Column::Type, relationData.
tagValue(QStringLiteral(
"type")));
95 d->m_currentRelations->addTopLevelItem( newRelationItem );
99 d->m_currentRelations->editItem( newRelationItem, Column::Role );
103void OsmRelationManagerWidget::update()
105 d->populateRelationsList();
106 d->populateDropMenu();
109void OsmRelationManagerWidget::handleDoubleClick(
QTreeWidgetItem * item,
int column )
114 if ( column == Column::Role ) {
123void OsmRelationManagerWidget::handleItemChange(
QTreeWidgetItem *item,
int column )
126 if ( column != Column::Role ) {
133 d->m_placemark->osmData().addRelation(
id, OsmType::Way, role );
137void OsmRelationManagerWidget::handleRelationContextMenuRequest(
const QPoint& point )
139 QMenu relationEditMenu;
140 relationEditMenu.
addAction( tr(
"Remove" ) );
141 relationEditMenu.
addAction( tr(
"Edit" ) );
142 QAction* selectedItem = relationEditMenu.
exec( d->m_currentRelations->mapToGlobal( point ) );
143 if ( selectedItem ) {
145 QTreeWidgetItem *requestedItem = d->m_currentRelations->itemAt( point );
148 if ( selectedItem->
text() == tr(
"Remove" ) ) {
149 d->m_placemark->osmData().removeRelation(
id );
152 else if ( selectedItem->
text() == tr(
"Edit" ) ) {
153 OsmPlacemarkData relationData = d->m_allRelations->value(
id );
155 const int result = relationEditor->exec();
156 delete relationEditor;
161 emit relationCreated( relationData );
169#include "moc_OsmRelationManagerWidget.cpp"
This class is used to encapsulate the osm data fields kept within a placemark's extendedData.
QString tagValue(const QString &key) const
tagValue returns the value of the tag that has key as key or an empty qstring if there is no such tag
The OsmRelationEditorDialog class small dialog that is used to edit relations The dialog has a line e...
void update(Part *part, const QByteArray &data, qint64 dataSize)
Binds a QML item to a specific geodetic location in screen coordinates.
QVariant data() const const
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
void setText(int column, const QString &text)
QString text(int column) const const
qlonglong toLongLong(bool *ok) const const