rename libs/piqt_widgtes to libs/piqt_utils
add PIVariantEdit for PIGeoPosition
This commit is contained in:
63
libs/map/pivariant_geoposition.cpp
Normal file
63
libs/map/pivariant_geoposition.cpp
Normal file
@@ -0,0 +1,63 @@
|
||||
#include "pivariant_geoposition.h"
|
||||
|
||||
#include "mapitemimage.h"
|
||||
#include "piqt.h"
|
||||
#include "pivaluetree.h"
|
||||
#include "ui_pivariant_geoposition.h"
|
||||
#include "ui_pivariant_geoposition_map.h"
|
||||
|
||||
#include <QFileDialog>
|
||||
|
||||
|
||||
REGISTER_PIVARIANTEDITOR(PIGeoPosition, PIVariantEditors::GeoPosition);
|
||||
|
||||
#define GeoUI reinterpret_cast<Ui::GeoPosition *>(ui)
|
||||
|
||||
using Attribute = PIValueTree::Attribute;
|
||||
|
||||
|
||||
PIVariantEditors::GeoPosition::GeoPosition() {
|
||||
QWidget * w = new QWidget();
|
||||
ui = new Ui::GeoPosition();
|
||||
GeoUI->setupUi(w);
|
||||
layout()->addWidget(w);
|
||||
connect(GeoUI->buttonMap, &QToolButton::clicked, this, [this]() {
|
||||
QDialog dlg;
|
||||
Ui::GeoPositionMap ui;
|
||||
ui.setupUi(&dlg);
|
||||
ui.map->setCenter(PI2QGeoPosition(value().value<PIGeoPosition>()));
|
||||
auto * item = new MapItemImage(QPixmap(":/icons/location.png"));
|
||||
item->setAlignment(Qt::AlignHCenter | Qt::AlignBottom);
|
||||
item->setScale(0.333 * appScale(this));
|
||||
item->setPosition(ui.map->center());
|
||||
ui.map->addItem(item);
|
||||
connect(ui.map, &MapView::mapClicked, this, [item](QPointF c) { item->setPosition(c); });
|
||||
if (dlg.exec() != QDialog::Accepted) return;
|
||||
PIGeoPosition gp({item->position().x(), item->position().y(), 0.}, PIGeoPosition::Geodetic);
|
||||
setValue(PIVariant::fromValue(gp));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
PIVariantEditors::GeoPosition::~GeoPosition() {
|
||||
delete GeoUI;
|
||||
}
|
||||
|
||||
|
||||
void PIVariantEditors::GeoPosition::setValue(const PIVariant & v) {
|
||||
val = v.value<PIGeoPosition>();
|
||||
GeoUI->line->setText(PI2QString(v.toString()));
|
||||
}
|
||||
|
||||
|
||||
PIVariant PIVariantEditors::GeoPosition::value() const {
|
||||
PIGeoPosition g = __PIVariantFunctions__<PIString>::castVariant<PIGeoPosition>(Q2PIString(GeoUI->line->text()));
|
||||
return PIVariant::fromValue(g);
|
||||
}
|
||||
|
||||
|
||||
void PIVariantEditors::GeoPosition::applyAttributes(const PIVariantMap & a) {
|
||||
bool ro = a.value(Attribute::readOnly, GeoUI->line->isReadOnly()).toBool();
|
||||
GeoUI->line->setReadOnly(ro);
|
||||
GeoUI->buttonMap->setHidden(ro);
|
||||
}
|
||||
Reference in New Issue
Block a user