[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [marble] src/lib/marble: PopupLayer: move popup content code from action menu to PopupLayer
From:       Thibaut Gridel <tgridel () free ! fr>
Date:       2014-01-08 20:32:40
Message-ID: E1W0zns-0005Su-Iv () scm ! kde ! org
[Download RAW message or body]

Git commit d24a0536cec2f6ddbe5fe4e694c9b3b2150d92c4 by Thibaut Gridel.
Committed on 08/01/2014 at 18:15.
Pushed by tgridel into branch 'master'.

PopupLayer: move popup content code from action menu to PopupLayer

M  +0    -184  src/lib/marble/MarbleWidgetPopupMenu.cpp
M  +182  -0    src/lib/marble/layers/PopupLayer.cpp
M  +7    -0    src/lib/marble/layers/PopupLayer.h

http://commits.kde.org/marble/d24a0536cec2f6ddbe5fe4e694c9b3b2150d92c4

diff --git a/src/lib/marble/MarbleWidgetPopupMenu.cpp \
b/src/lib/marble/MarbleWidgetPopupMenu.cpp index 2b37d2b..c3861f6 100644
--- a/src/lib/marble/MarbleWidgetPopupMenu.cpp
+++ b/src/lib/marble/MarbleWidgetPopupMenu.cpp
@@ -21,9 +21,6 @@
 #include "MarbleModel.h"
 #include "GeoDataPlacemark.h"
 #include "GeoDataStyle.h"
-#include "GeoDataExtendedData.h"
-#include "GeoSceneDocument.h"
-#include "GeoSceneHead.h"
 #include "MarbleClock.h"
 #include "MarbleDebug.h"
 #include "PopupLayer.h"
@@ -32,9 +29,7 @@
 #include "routing/RouteRequest.h"
 #include "EditBookmarkDialog.h"
 #include "BookmarkManager.h"
-#include "MarbleDirs.h"
 #include "ReverseGeocodingRunnerManager.h"
-#include "TemplateDocument.h"
 
 // Qt
 #include <QApplication>
@@ -73,12 +68,6 @@ public:
 public:
     Private( MarbleWidget *widget, const MarbleModel *model, MarbleWidgetPopupMenu* \
parent );  QMenu* createInfoBoxMenu();
-    QString filterEmptyShortDescription(const QString &description) const;
-    void setupDialogSatellite(PopupLayer *popup, const GeoDataPlacemark *index);
-    void setupDialogCity(PopupLayer *popup, const GeoDataPlacemark *index);
-    void setupDialogNation(PopupLayer *popup, const GeoDataPlacemark *index);
-    void setupDialogGeoPlaces(PopupLayer *popup, const GeoDataPlacemark *index);
-    void setupDialogSkyPlaces(PopupLayer *popup, const GeoDataPlacemark *index);
 
     /**
       * Returns the geo coordinates of the mouse pointer at the last right button \
menu. @@ -280,185 +269,12 @@ void MarbleWidgetPopupMenu::slotInfoDialog()
 
     if ( actionidx > 0 ) {
         const GeoDataPlacemark *index = d->m_featurelist.at( actionidx -1 );
-        bool isSatellite = (index->visualCategory() == GeoDataFeature::Satellite);
-        bool isCity (index->visualCategory() >= GeoDataFeature::SmallCity &&
-                         index->visualCategory() <= \
                GeoDataFeature::LargeNationCapital);
-        bool isNation = (index->visualCategory() == GeoDataFeature::Nation);
-        bool isSky = false;
-        if ( d->m_model->mapTheme() ) {
-            isSky = d->m_model->mapTheme()->head()->target() == "sky";
-        }
         PopupLayer* popup = d->m_widget->popupLayer();
-        popup->setSize(QSizeF(580, 620));
-        if (isSatellite) {
-            d->setupDialogSatellite(popup, index);
-        } else if (isCity) {
-            d->setupDialogCity(popup, index);
-        } else if (isNation) {
-            d->setupDialogNation(popup, index);
-        } else if (isSky) {
-            d->setupDialogSkyPlaces(popup, index);
-        } else if (index->role().isEmpty()) {
-            popup->setContent(index->description());
-        } else {
-            d->setupDialogGeoPlaces(popup, index);
-        }
         popup->setPlacemark(index);
         popup->popup();
     }
 }
 
-QString MarbleWidgetPopupMenu::Private::filterEmptyShortDescription(const QString \
                &description) const
-{
-    if(description.isEmpty())
-        return tr("No description available.");
-    return description;
-}
-
-void MarbleWidgetPopupMenu::Private::setupDialogSatellite(PopupLayer *popup, const \
                GeoDataPlacemark *index)
-{
-    GeoDataCoordinates location = index->coordinate(m_model->clockDateTime());
-    popup->setCoordinates(location, Qt::AlignRight | Qt::AlignVCenter);
-
-    const QString description = index->description();
-    TemplateDocument doc(description);
-    doc["altitude"] = QString::number(location.altitude(), 'f', 2);
-    doc["latitude"] = location.latToString();
-    doc["longitude"] = location.lonToString();
-    popup->setContent(doc.finalText());
-}
-
-void MarbleWidgetPopupMenu::Private::setupDialogCity(PopupLayer *popup, const \
                GeoDataPlacemark *index)
-{
-    GeoDataCoordinates location = index->coordinate();
-    popup->setCoordinates(location, Qt::AlignRight | Qt::AlignVCenter);
-
-    QFile descriptionFile(":/marble/webpopup/city.html");
-    if (!descriptionFile.open(QIODevice::ReadOnly)) {
-        return;
-    }
-
-    const QString description = descriptionFile.readAll();
-    TemplateDocument doc(description);
-
-    doc["name"] = index->name();
-    QString  roleString;
-    const QString role = index->role();
-    if(role=="PPLC") {
-        roleString = tr("National Capital");
-    } else if(role=="PPL") {
-        roleString = tr("City");
-    } else if(role=="PPLA") {
-        roleString = tr("State Capital");
-    } else if(role=="PPLA2") {
-        roleString = tr("County Capital");
-    } else if(role=="PPLA3" || role=="PPLA4" ) {
-        roleString = tr("Capital");
-    } else if(role=="PPLF" || role=="PPLG" || role=="PPLL" || role=="PPLQ" ||
-              role=="PPLR" || role=="PPLS" || role=="PPLW" ) {
-        roleString = tr("Village");
-    }
-
-    doc["category"] = roleString;
-    doc["shortDescription"] = filterEmptyShortDescription(index->description());
-    doc["latitude"] = location.latToString();
-    doc["longitude"] = location.lonToString();
-    doc["elevation"] =  QString::number(location.altitude(), 'f', 2);
-    doc["population"] = QString::number(index->population());
-    doc["country"] = index->countryCode();
-    doc["state"] = index->state();
-
-    QString dst = QString( "%1" ).arg( ( \
                index->extendedData().value("gmt").value().toInt() +
-                                         \
                index->extendedData().value("dst").value().toInt() ) /
-                                       ( double ) 100, 0, 'f', 1 );
-    // There is an issue about UTC.
-    // It's possible to variants (e.g.):
-    // +1.0 and -1.0, but dst does not have + an the start
-    if(dst.startsWith('-')) {
-        doc["timezone"] = dst;
-    } else {
-        doc["timezone"] = '+'+dst;
-    }
-
-    const QString flagPath = MarbleDirs::path(
-                QString("flags/flag_%1.svg").arg(index->countryCode().toLower()));
-    doc["flag"] = flagPath;
-
-    popup->setContent(doc.finalText());
-}
-
-void MarbleWidgetPopupMenu::Private::setupDialogNation(PopupLayer *popup, const \
                GeoDataPlacemark *index)
-{
-    GeoDataCoordinates location = index->coordinate();
-    popup->setCoordinates(location, Qt::AlignRight | Qt::AlignVCenter);
-
-    QFile descriptionFile(":/marble/webpopup/nation.html");
-    if (!descriptionFile.open(QIODevice::ReadOnly)) {
-        return;
-    }
-
-    const QString description = descriptionFile.readAll();
-    TemplateDocument doc(description);
-
-    doc["name"] = index->name();
-    doc["shortDescription"] = filterEmptyShortDescription(index->description());
-    doc["latitude"] = location.latToString();
-    doc["longitude"] = location.lonToString();
-    doc["elevation"] = QString::number(location.altitude(), 'f', 2);
-    doc["population"] = QString::number(index->population());
-    doc["area"] = QString::number(index->area(), 'f', 2);
-
-    const QString flagPath = \
                MarbleDirs::path(QString("flags/flag_%1.svg").arg(index->countryCode().toLower()) \
                );
-    doc["flag"] = flagPath;
-
-    popup->setContent(doc.finalText());
-}
-
-void MarbleWidgetPopupMenu::Private::setupDialogGeoPlaces(PopupLayer *popup, const \
                GeoDataPlacemark *index)
-{
-    GeoDataCoordinates location = index->coordinate();
-    popup->setCoordinates(location, Qt::AlignRight | Qt::AlignVCenter);
-
-    QFile descriptionFile(":/marble/webpopup/geoplace.html");
-    if (!descriptionFile.open(QIODevice::ReadOnly)) {
-        return;
-    }
-
-    const QString description = descriptionFile.readAll();
-    TemplateDocument doc(description);
-
-    doc["name"] = index->name();
-    doc["latitude"] = location.latToString();
-    doc["longitude"] = location.lonToString();
-    doc["elevation"] = QString::number(location.altitude(), 'f', 2);
-    doc["shortDescription"] = filterEmptyShortDescription(index->description());
-
-    popup->setContent(doc.finalText());
-}
-
-void MarbleWidgetPopupMenu::Private::setupDialogSkyPlaces(PopupLayer *popup, const \
                GeoDataPlacemark *index)
-{
-    GeoDataCoordinates location = index->coordinate();
-    popup->setCoordinates(location, Qt::AlignRight | Qt::AlignVCenter);
-
-    QFile descriptionFile(":/marble/webpopup/skyplace.html");
-    if (!descriptionFile.open(QIODevice::ReadOnly)) {
-        return;
-    }
-
-    const QString description = descriptionFile.readAll();
-    TemplateDocument doc(description);
-
-    doc["name"] = index->name();
-    doc["latitude"] = GeoDataCoordinates::latToString(
-                            location.latitude(), GeoDataCoordinates::Astro, \
                GeoDataCoordinates::Radian, -1, 'f');
-    doc["longitude"] = GeoDataCoordinates::lonToString(
-                            location.longitude(), GeoDataCoordinates::Astro, \
                GeoDataCoordinates::Radian, -1, 'f');
-    doc["shortDescription"] = filterEmptyShortDescription(index->description());
-
-    popup->setContent(doc.finalText());
-}
-
 void MarbleWidgetPopupMenu::slotCopyCoordinates()
 {
     const GeoDataCoordinates coordinates = d->mouseCoordinates( \
                d->m_copyCoordinateAction );
diff --git a/src/lib/marble/layers/PopupLayer.cpp \
b/src/lib/marble/layers/PopupLayer.cpp index daa7f72..297f10b 100644
--- a/src/lib/marble/layers/PopupLayer.cpp
+++ b/src/lib/marble/layers/PopupLayer.cpp
@@ -12,10 +12,16 @@
 
 #include "PopupLayer.h"
 #include "MarbleWidget.h"
+#include "MarbleModel.h"
+#include "MarbleDirs.h"
 #include "PopupItem.h"
+#include "GeoDataExtendedData.h"
 #include "GeoDataPlacemark.h"
 #include "GeoDataStyle.h"
 #include "GeoDataSnippet.h"
+#include "GeoSceneDocument.h"
+#include "GeoSceneHead.h"
+#include "TemplateDocument.h"
 
 #include <QMouseEvent>
 #include <QApplication>
@@ -124,6 +130,29 @@ void PopupLayer::setContent( const QString &html )
 
 void PopupLayer::setPlacemark( const GeoDataPlacemark *placemark )
 {
+    bool isSatellite = (placemark->visualCategory() == GeoDataFeature::Satellite);
+    bool isCity (placemark->visualCategory() >= GeoDataFeature::SmallCity &&
+                     placemark->visualCategory() <= \
GeoDataFeature::LargeNationCapital); +    bool isNation = \
(placemark->visualCategory() == GeoDataFeature::Nation); +    bool isSky = false;
+    if ( m_widget->model()->mapTheme() ) {
+        isSky = m_widget->model()->mapTheme()->head()->target() == "sky";
+    }
+    setSize(QSizeF(580, 620));
+    if (isSatellite) {
+        setupDialogSatellite( placemark );
+    } else if (isCity) {
+        setupDialogCity( placemark );
+    } else if (isNation) {
+        setupDialogNation( placemark );
+    } else if (isSky) {
+        setupDialogSkyPlaces( placemark );
+    } else if ( placemark->role().isEmpty() ) {
+        setContent( placemark->description() );
+    } else {
+        setupDialogGeoPlaces( placemark );
+    }
+
     if (placemark->style() == 0) {
         m_popupItem->setBackgroundColor(QColor(Qt::white));
         m_popupItem->setTextColor(QColor(Qt::black));
@@ -162,6 +191,159 @@ void PopupLayer::setTextColor(const QColor &color)
     }
 }
 
+QString PopupLayer::filterEmptyShortDescription(const QString &description) const
+{
+    if(description.isEmpty())
+        return tr("No description available.");
+    return description;
+}
+
+void PopupLayer::setupDialogSatellite( const GeoDataPlacemark *index)
+{
+    GeoDataCoordinates location = \
index->coordinate(m_widget->model()->clockDateTime()); +    setCoordinates(location, \
Qt::AlignRight | Qt::AlignVCenter); +
+    const QString description = index->description();
+    TemplateDocument doc(description);
+    doc["altitude"] = QString::number(location.altitude(), 'f', 2);
+    doc["latitude"] = location.latToString();
+    doc["longitude"] = location.lonToString();
+    setContent(doc.finalText());
+}
+
+void PopupLayer::setupDialogCity( const GeoDataPlacemark *index)
+{
+    GeoDataCoordinates location = index->coordinate();
+    setCoordinates(location, Qt::AlignRight | Qt::AlignVCenter);
+
+    QFile descriptionFile(":/marble/webpopup/city.html");
+    if (!descriptionFile.open(QIODevice::ReadOnly)) {
+        return;
+    }
+
+    const QString description = descriptionFile.readAll();
+    TemplateDocument doc(description);
+
+    doc["name"] = index->name();
+    QString  roleString;
+    const QString role = index->role();
+    if(role=="PPLC") {
+        roleString = tr("National Capital");
+    } else if(role=="PPL") {
+        roleString = tr("City");
+    } else if(role=="PPLA") {
+        roleString = tr("State Capital");
+    } else if(role=="PPLA2") {
+        roleString = tr("County Capital");
+    } else if(role=="PPLA3" || role=="PPLA4" ) {
+        roleString = tr("Capital");
+    } else if(role=="PPLF" || role=="PPLG" || role=="PPLL" || role=="PPLQ" ||
+              role=="PPLR" || role=="PPLS" || role=="PPLW" ) {
+        roleString = tr("Village");
+    }
+
+    doc["category"] = roleString;
+    doc["shortDescription"] = filterEmptyShortDescription(index->description());
+    doc["latitude"] = location.latToString();
+    doc["longitude"] = location.lonToString();
+    doc["elevation"] =  QString::number(location.altitude(), 'f', 2);
+    doc["population"] = QString::number(index->population());
+    doc["country"] = index->countryCode();
+    doc["state"] = index->state();
+
+    QString dst = QString( "%1" ).arg( ( \
index->extendedData().value("gmt").value().toInt() + +                                \
index->extendedData().value("dst").value().toInt() ) / +                              \
( double ) 100, 0, 'f', 1 ); +    // There is an issue about UTC.
+    // It's possible to variants (e.g.):
+    // +1.0 and -1.0, but dst does not have + an the start
+    if(dst.startsWith('-')) {
+        doc["timezone"] = dst;
+    } else {
+        doc["timezone"] = '+'+dst;
+    }
+
+    const QString flagPath = MarbleDirs::path(
+                QString("flags/flag_%1.svg").arg(index->countryCode().toLower()));
+    doc["flag"] = flagPath;
+
+    setContent(doc.finalText());
+}
+
+void PopupLayer::setupDialogNation( const GeoDataPlacemark *index)
+{
+    GeoDataCoordinates location = index->coordinate();
+    setCoordinates(location, Qt::AlignRight | Qt::AlignVCenter);
+
+    QFile descriptionFile(":/marble/webpopup/nation.html");
+    if (!descriptionFile.open(QIODevice::ReadOnly)) {
+        return;
+    }
+
+    const QString description = descriptionFile.readAll();
+    TemplateDocument doc(description);
+
+    doc["name"] = index->name();
+    doc["shortDescription"] = filterEmptyShortDescription(index->description());
+    doc["latitude"] = location.latToString();
+    doc["longitude"] = location.lonToString();
+    doc["elevation"] = QString::number(location.altitude(), 'f', 2);
+    doc["population"] = QString::number(index->population());
+    doc["area"] = QString::number(index->area(), 'f', 2);
+
+    const QString flagPath = \
MarbleDirs::path(QString("flags/flag_%1.svg").arg(index->countryCode().toLower()) ); \
+    doc["flag"] = flagPath; +
+    setContent(doc.finalText());
+}
+
+void PopupLayer::setupDialogGeoPlaces( const GeoDataPlacemark *index)
+{
+    GeoDataCoordinates location = index->coordinate();
+    setCoordinates(location, Qt::AlignRight | Qt::AlignVCenter);
+
+    QFile descriptionFile(":/marble/webpopup/geoplace.html");
+    if (!descriptionFile.open(QIODevice::ReadOnly)) {
+        return;
+    }
+
+    const QString description = descriptionFile.readAll();
+    TemplateDocument doc(description);
+
+    doc["name"] = index->name();
+    doc["latitude"] = location.latToString();
+    doc["longitude"] = location.lonToString();
+    doc["elevation"] = QString::number(location.altitude(), 'f', 2);
+    doc["shortDescription"] = filterEmptyShortDescription(index->description());
+
+    setContent(doc.finalText());
+}
+
+void PopupLayer::setupDialogSkyPlaces( const GeoDataPlacemark *index)
+{
+    GeoDataCoordinates location = index->coordinate();
+    setCoordinates(location, Qt::AlignRight | Qt::AlignVCenter);
+
+    QFile descriptionFile(":/marble/webpopup/skyplace.html");
+    if (!descriptionFile.open(QIODevice::ReadOnly)) {
+        return;
+    }
+
+    const QString description = descriptionFile.readAll();
+    TemplateDocument doc(description);
+
+    doc["name"] = index->name();
+    doc["latitude"] = GeoDataCoordinates::latToString(
+                            location.latitude(), GeoDataCoordinates::Astro, \
GeoDataCoordinates::Radian, -1, 'f'); +    doc["longitude"] = \
GeoDataCoordinates::lonToString( +                            location.longitude(), \
GeoDataCoordinates::Astro, GeoDataCoordinates::Radian, -1, 'f'); +    \
doc["shortDescription"] = filterEmptyShortDescription(index->description()); +
+    setContent(doc.finalText());
+}
+
+
+
 void PopupLayer::setSize( const QSizeF &size )
 {
     m_requestedSize = size;
diff --git a/src/lib/marble/layers/PopupLayer.h b/src/lib/marble/layers/PopupLayer.h
index a838360..ed74503 100644
--- a/src/lib/marble/layers/PopupLayer.h
+++ b/src/lib/marble/layers/PopupLayer.h
@@ -170,6 +170,13 @@ private:
      */
     void setAppropriateSize( const ViewportParams *viewport );
 
+    QString filterEmptyShortDescription(const QString &description) const;
+    void setupDialogSatellite( const GeoDataPlacemark *index );
+    void setupDialogCity( const GeoDataPlacemark *index );
+    void setupDialogNation( const GeoDataPlacemark *index );
+    void setupDialogGeoPlaces( const GeoDataPlacemark *index );
+    void setupDialogSkyPlaces( const GeoDataPlacemark *index );
+
     PopupItem *const m_popupItem;
     MarbleWidget * const m_widget;
     QSizeF m_requestedSize;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic