21 #include <MarbleModel.h>
22 #include <HttpDownloadManager.h>
24 #include <QStringList>
26 using namespace Marble;
29 #define CIRCUIT_NORMAL_PEN QPen(Qt::blue, 2.0)
30 #define CIRCUIT_SELECTED_PEN QPen(Qt::green, 3.0)
35 : MarbleWidget(parent)
37 setMapThemeId(
"earth/srtm/srtm.dgml");
38 setShowScaleBar(
false);
39 setShowCrosshairs(
false);
40 setAnimationsEnabled(
true);
41 setCursor(Qt::OpenHandCursor);
43 model()->downloadManager()->setDownloadEnabled(
false);
48 connect(handler, SIGNAL(featureClicked(QPoint,Qt::MouseButton)),
49 popupMenu, SLOT(featureClicked(QPoint,Qt::MouseButton)));
57 vApp->processEvents(QEventLoop::ExcludeUserInputEvents
58 | QEventLoop::ExcludeSocketNotifiers);
60 setInputHandler(handler);
81 kml.append(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
82 "<kml xmlns=\"http://earth.google.com/kml/2.0\">"
84 " <Style id=\"normalPlacemark\">"
85 " <IconStyle><Icon><href>:/images/icons/placemark-relay.png</href></Icon></IconStyle>"
89 kml.append(
"<Placemark>");
90 kml.append(
"<styleUrl>#normalPlacemark</styleUrl>");
91 kml.append(QString(
"<name>%1</name>").arg(desc.
name()));
92 kml.append(QString(
"<description>%1</description>").arg(desc.
id()));
93 kml.append(QString(
"<role>1</role>"));
94 kml.append(QString(
"<address>%1</address>").arg(geoip.
toString()));
95 kml.append(QString(
"<CountryNameCode>%1</CountryNameCode>").arg(geoip.
country()));
96 kml.append(QString(
"<pop>%1</pop>").arg(10 * bw));
97 kml.append(QString(
"<Point>"
98 " <coordinates>%1,%2</coordinates>"
99 "</Point>").arg(lon).arg(lat));
100 kml.append(
"</Placemark>");
101 kml.append(
"</Document></kml>");
103 QString
id = desc.
id();
104 addPlacemarkData(kml,
id);
105 _routers.insert(
id, GeoDataCoordinates(lon, lat, 0.0,
106 GeoDataCoordinates::Degree));
127 QString router = path.at(path.size()-1);
129 geoPath->first.append(
_routers.value(router));
133 geoPath->second =
false;
135 foreach (QString router, path) {
137 geoPath->first.append(
_routers.value(router));
139 geoPath->first.setTessellationFlags(Tessellate | RespectLatitudeCircle);
163 QPair<QPointF, bool> *routerPair =
_routers.value(
id);
164 routerPair->second =
true;
189 foreach (QString router,
_routers.keys()) {
190 QPair<QPointF,bool> *routerPair =
_routers.value(router);
191 routerPair->second =
false;
196 path->second =
false;
206 foreach (QString
id,
_routers.keys()) {
207 removePlacemarkKey(
id);
223 int width = size().width();
224 int height = size().height();
226 setRadius(qMin(width, height) / 2);
230 setShowAtmosphere(
true);
239 QPair<QPainterPath*,bool> *pair =
_circuits.value(circid);
240 QRectF rect = ((QPainterPath *)pair->first)->boundingRect();
241 if (!rect.isNull()) {
242 float zoomLevel = 1.0 - qMax(rect.height()/
float(
MAP_HEIGHT),
245 zoom(rect.center().toPoint(), zoomLevel+0.2);
257 GeoDataCoordinates coords =
_routers.value(
id);
258 coords.geoCoordinates(lon, lat, GeoDataPoint::Degree);
260 zoomView(maximumZoom());
261 centerOn(lon, lat,
true);
269 bool selected =
false;
271 painter->autoMapQuality();
275 if (! path->second && selected) {
278 }
else if (path->second && ! selected) {
282 painter->drawPolyline(path->first);