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

List:       kde-commits
Subject:    [marble] src: Add a debug mode that filters level tag values
From:       Mohammed Nafees <null () kde ! org>
Date:       2017-07-31 19:02:39
Message-ID: E1dcFxf-0004oK-6S () code ! kde ! org
[Download RAW message or body]

Git commit 80f452ca88b5103ccffd55672b21fc16b85de42b by Mohammed Nafees.
Committed on 31/07/2017 at 19:00.
Pushed by nafees into branch 'master'.

Add a debug mode that filters level tag values

Differential Revision: https://phabricator.kde.org/D884

M  +6    -0    src/apps/marble-kde/kdemain.cpp
M  +12   -5    src/apps/marble-qt/qtmain.cpp
M  +6    -2    src/lib/marble/MarbleInputHandler.cpp
M  +23   -0    src/lib/marble/MarbleMap.cpp
M  +15   -0    src/lib/marble/MarbleMap.h
M  +20   -0    src/lib/marble/MarbleWidget.cpp
M  +17   -1    src/lib/marble/MarbleWidget.h
M  +60   -16   src/lib/marble/MarbleWidgetInputHandler.cpp
M  +46   -1    src/lib/marble/layers/GeometryLayer.cpp
M  +8    -0    src/lib/marble/layers/GeometryLayer.h

https://commits.kde.org/marble/80f452ca88b5103ccffd55672b21fc16b85de42b

diff --git a/src/apps/marble-kde/kdemain.cpp b/src/apps/marble-kde/kdemain.cpp
index 33cd9508e..4cd2c11e4 100644
--- a/src/apps/marble-kde/kdemain.cpp
+++ b/src/apps/marble-kde/kdemain.cpp
@@ -333,6 +333,8 @@ int main ( int argc, char *argv[] )
 
     QCommandLineOption debugOption( "debug-info", i18n( "Enable debug output" ) );
     parser.addOption( debugOption );
+    QCommandLineOption levelOption( "debug-levels", i18n( "Display OSM placemarks \
according to the level selected" ) ); +    parser.addOption( levelOption );
     QCommandLineOption timeOption( "timedemo", i18n( "Make a time measurement to \
check performance" ) );  parser.addOption( timeOption );
     QCommandLineOption fpsOption( "fps", i18n( "Show frame rate" ) );
@@ -399,6 +401,10 @@ int main ( int argc, char *argv[] )
         window->marbleControl()->marbleWidget()->setShowFrameRate( true );
     }
 
+    if (parser.isSet(levelOption)) {
+        window->marbleWidget()->setDebugLevelTags(true);
+    }
+
     if ( parser.isSet( tileOption ) ) {
         window->marbleControl()->marbleWidget()->setShowTileId( true );
     }
diff --git a/src/apps/marble-qt/qtmain.cpp b/src/apps/marble-qt/qtmain.cpp
index 7d5575732..72c3ab597 100644
--- a/src/apps/marble-qt/qtmain.cpp
+++ b/src/apps/marble-qt/qtmain.cpp
@@ -158,7 +158,8 @@ int main(int argc, char *argv[])
         qWarning() << "  --runtimeTrace.............. Show the time spent and other \
                debug info of each layer";
         qWarning() << "  --tile-id................... Write the identifier of \
                texture tiles on top of them";
         qWarning() << "  --timedemo ................. Measure the paint performance \
                while moving the map and quit";
-        qWarning() << "  --debug-polygons .............Display the polygon nodes and \
their index for debugging"; +        qWarning() << "  --debug-polygons ........... \
Display the polygon nodes and their index for debugging"; +        qWarning() << "  \
--debug-levels ............. Display OSM placemarks according to the level selected"; \
                qWarning();
         qWarning() << "profile options (note that marble should automatically detect \
                which profile to use. Override that with the options below):";
         qWarning() << "  --highresolution ........... Enforce the profile for \
devices with high resolution (e.g. desktop computers)"; @@ -278,7 +279,8 @@ int \
main(int argc, char *argv[])  marbleTest.timeDemo();
             return 0;
         }
-        else if (arg == QLatin1String("--fps")) {
+
+        if (arg == QLatin1String("--fps")) {
             window->marbleControl()->marbleWidget()->setShowFrameRate( true );
         }
         else if (arg == QLatin1String("--tile-id")) {
@@ -290,12 +292,17 @@ int main(int argc, char *argv[])
         else if (arg == QLatin1String("--debug-polygons")) {
             window->marbleControl()->marbleWidget()->setShowDebugPolygons( true );
         }
-        else if ( i != dataPathIndex && QFile::exists( arg ) )
-            window->addGeoDataFile( arg );
+        else if ( i != dataPathIndex && QFile::exists( arg ) ) {
+            window->addGeoDataFile(arg);
+        }
+        else if (arg == QLatin1String("--debug-levels")) {
+            window->marbleWidget()->setDebugLevelTags(true);
+        }
     }
 
     auto const marbleWidget = window->marbleControl()->marbleWidget();
-    bool const debugModeEnabled = marbleWidget->showRuntimeTrace() || \
marbleWidget->showDebugPolygons() || MarbleDebug::isEnabled(); +    bool const \
debugModeEnabled = marbleWidget->showRuntimeTrace() || \
marbleWidget->showDebugPolygons() || +            marbleWidget->debugLevelTags() || \
MarbleDebug::isEnabled();  \
marbleWidget->inputHandler()->setDebugModeEnabled(debugModeEnabled);  
     return app.exec();
diff --git a/src/lib/marble/MarbleInputHandler.cpp \
b/src/lib/marble/MarbleInputHandler.cpp index 63e874d5a..7999fc11c 100644
--- a/src/lib/marble/MarbleInputHandler.cpp
+++ b/src/lib/marble/MarbleInputHandler.cpp
@@ -941,10 +941,14 @@ bool MarbleDefaultInputHandler::handleKeyPress(QKeyEvent* \
event)  marblePresenter->moveByStep(0, 1);
             break;
         case Qt::Key_Plus:
-            marblePresenter->zoomIn();
+            if (event->modifiers() != Qt::ControlModifier) {
+                marblePresenter->zoomIn();
+            }
             break;
         case Qt::Key_Minus:
-            marblePresenter->zoomOut();
+            if (event->modifiers() != Qt::ControlModifier) {
+                marblePresenter->zoomOut();
+            }
             break;
         case Qt::Key_Home:
             marblePresenter->goHome();
diff --git a/src/lib/marble/MarbleMap.cpp b/src/lib/marble/MarbleMap.cpp
index d62642a8a..6d990651d 100644
--- a/src/lib/marble/MarbleMap.cpp
+++ b/src/lib/marble/MarbleMap.cpp
@@ -1302,6 +1302,29 @@ bool MarbleMap::showDebugPlacemarks() const
     return d->m_placemarkLayer.isDebugModeEnabled();
 }
 
+void MarbleMap::setLevelTagDebugModeEnabled(bool visible)
+{
+    if (visible != d->m_geometryLayer.levelTagDebugModeEnabled()) {
+        d->m_geometryLayer.setLevelTagDebugModeEnabled(visible);
+        emit repaintNeeded();
+    }
+}
+
+bool MarbleMap::levelTagDebugModeEnabled() const
+{
+    return d->m_geometryLayer.levelTagDebugModeEnabled();
+}
+
+void MarbleMap::setDebugLevelTag(int level)
+{
+    d->m_geometryLayer.setDebugLevelTag(level);
+}
+
+int MarbleMap::debugLevelTag() const
+{
+    return d->m_geometryLayer.debugLevelTag();
+}
+
 void MarbleMap::setShowBackground( bool visible )
 {
     d->m_layerManager.setShowBackground( visible );
diff --git a/src/lib/marble/MarbleMap.h b/src/lib/marble/MarbleMap.h
index 2ffec6941..19ae1be78 100644
--- a/src/lib/marble/MarbleMap.h
+++ b/src/lib/marble/MarbleMap.h
@@ -675,6 +675,21 @@ class MARBLE_EXPORT MarbleMap : public QObject
 
     bool showDebugPlacemarks() const;
 
+
+    /**
+     * @brief Set whether to enter the debug mode for
+     * level tags
+     * @param visible visibility according to OSM level tags
+     */
+    void setLevelTagDebugModeEnabled(bool visible);
+
+    bool levelTagDebugModeEnabled() const;
+
+    void setDebugLevelTag(int level);
+
+    int debugLevelTag() const;
+
+
     void setShowBackground( bool visible );
 
     void setVisibleRelationTypes(GeoDataRelation::RelationTypes relationTypes);
diff --git a/src/lib/marble/MarbleWidget.cpp b/src/lib/marble/MarbleWidget.cpp
index 3c2f31967..3a656f77a 100644
--- a/src/lib/marble/MarbleWidget.cpp
+++ b/src/lib/marble/MarbleWidget.cpp
@@ -950,6 +950,16 @@ bool MarbleWidget::showDebugPlacemarks() const
     return d->m_map.showDebugPlacemarks();
 }
 
+void MarbleWidget::setDebugLevelTags(bool visible)
+{
+    d->m_map.setLevelTagDebugModeEnabled(visible);
+}
+
+bool MarbleWidget::debugLevelTags() const
+{
+    return d->m_map.levelTagDebugModeEnabled();
+}
+
 void MarbleWidget::setShowTileId( bool visible )
 {
     d->m_map.setShowTileId( visible );
@@ -1227,6 +1237,16 @@ qreal MarbleWidget::heading() const
     return d->m_map.heading();
 }
 
+void MarbleWidget::setLevelToDebug(int level)
+{
+    d->m_map.setDebugLevelTag(level);
+}
+
+int MarbleWidget::levelToDebug() const
+{
+    return d->m_map.debugLevelTag();
+}
+
 }
 
 #include "moc_MarbleWidget.cpp"
diff --git a/src/lib/marble/MarbleWidget.h b/src/lib/marble/MarbleWidget.h
index 4fdc4981d..2044ddcce 100644
--- a/src/lib/marble/MarbleWidget.h
+++ b/src/lib/marble/MarbleWidget.h
@@ -970,6 +970,22 @@ class MARBLE_EXPORT MarbleWidget : public QWidget
     bool showDebugPlacemarks() const;
 
     /**
+     * @brief Set whether to render according to OSM indoor level tags
+     * @param visible visibility of entities (placemarks, buildings etc.) level-wise
+     */
+    void setDebugLevelTags(bool visible);
+
+    bool debugLevelTags() const;
+
+    /**
+     * @brief Set the level to debug
+     * @param level the level to debug
+     */
+    void setLevelToDebug(int level);
+
+    int levelToDebug() const;
+
+        /**
      * @brief Set the map quality for the specified view context.
      *
      * @param quality map quality for the specified view context
@@ -1150,7 +1166,7 @@ class MARBLE_EXPORT MarbleWidget : public QWidget
     friend class CustomPaintLayer;
 
     friend class MarbleWidgetDefaultInputHandler;
-};
+    };
 
 }
 
diff --git a/src/lib/marble/MarbleWidgetInputHandler.cpp \
b/src/lib/marble/MarbleWidgetInputHandler.cpp index 6837a81ab..efd4726b9 100644
--- a/src/lib/marble/MarbleWidgetInputHandler.cpp
+++ b/src/lib/marble/MarbleWidgetInputHandler.cpp
@@ -106,22 +106,66 @@ void MarbleWidgetInputHandler::setCursor(const QCursor &cursor)
 bool MarbleWidgetInputHandler::handleKeyPress(QKeyEvent *event)
 {
     if (d->m_debugModeEnabled) {
-        switch(event->key()) {
-        case Qt::Key_I:
-            MarbleDebug::setEnabled(!MarbleDebug::isEnabled());
-            break;
-        case Qt::Key_R:
-            d->m_marbleWidget->setShowRuntimeTrace(!d->m_marbleWidget->showRuntimeTrace());
                
-            break;
-        case Qt::Key_O:
-            d->m_marbleWidget->setShowDebugPlacemarks(!d->m_marbleWidget->showDebugPlacemarks());
                
-            break;
-        case Qt::Key_P:
-            d->m_marbleWidget->setShowDebugPolygons(!d->m_marbleWidget->showDebugPolygons());
                
-            break;
-        case Qt::Key_B:
-            d->m_marbleWidget->setShowDebugBatchRender(!d->m_marbleWidget->showDebugBatchRender());
                
-            break;
+        if (event->modifiers() == Qt::ControlModifier && \
d->m_marbleWidget->debugLevelTags()) { +            switch(event->key()) {
+                case Qt::Key_0:
+                    d->m_marbleWidget->setLevelToDebug(0);
+                    break;
+                case Qt::Key_1:
+                    d->m_marbleWidget->setLevelToDebug(1);
+                    break;
+                case Qt::Key_2:
+                    d->m_marbleWidget->setLevelToDebug(2);
+                    break;
+                case Qt::Key_3:
+                    d->m_marbleWidget->setLevelToDebug(3);
+                    break;
+                case Qt::Key_4:
+                    d->m_marbleWidget->setLevelToDebug(4);
+                    break;
+                case Qt::Key_5:
+                    d->m_marbleWidget->setLevelToDebug(5);
+                    break;
+                case Qt::Key_6:
+                    d->m_marbleWidget->setLevelToDebug(6);
+                    break;
+                case Qt::Key_7:
+                    d->m_marbleWidget->setLevelToDebug(7);
+                    break;
+                case Qt::Key_8:
+                    d->m_marbleWidget->setLevelToDebug(8);
+                    break;
+                case Qt::Key_9:
+                    d->m_marbleWidget->setLevelToDebug(9);
+                    break;
+                case Qt::Key_Plus:
+                    \
d->m_marbleWidget->setLevelToDebug(d->m_marbleWidget->levelToDebug() + 1); +          \
break; +                case Qt::Key_Minus:
+                    \
d->m_marbleWidget->setLevelToDebug(d->m_marbleWidget->levelToDebug() - 1); +          \
break; +            }
+        } else {
+            switch(event->key()) {
+                case Qt::Key_I:
+                    MarbleDebug::setEnabled(!MarbleDebug::isEnabled());
+                    break;
+                case Qt::Key_R:
+                    \
d->m_marbleWidget->setShowRuntimeTrace(!d->m_marbleWidget->showRuntimeTrace()); +     \
break; +                case Qt::Key_O:
+                    \
d->m_marbleWidget->setShowDebugPlacemarks(!d->m_marbleWidget->showDebugPlacemarks()); \
+                    break; +                case Qt::Key_P:
+                    \
d->m_marbleWidget->setShowDebugPolygons(!d->m_marbleWidget->showDebugPolygons()); +   \
break; +                case Qt::Key_B:
+                    \
d->m_marbleWidget->setShowDebugBatchRender(!d->m_marbleWidget->showDebugBatchRender());
 +                    break;
+                case Qt::Key_L:
+                    \
d->m_marbleWidget->setDebugLevelTags(!d->m_marbleWidget->debugLevelTags()); +         \
break; +            }
         }
     }
     return MarbleDefaultInputHandler::handleKeyPress(event);
diff --git a/src/lib/marble/layers/GeometryLayer.cpp \
b/src/lib/marble/layers/GeometryLayer.cpp index 33ae3ae5c..74b8904ac 100644
--- a/src/lib/marble/layers/GeometryLayer.cpp
+++ b/src/lib/marble/layers/GeometryLayer.cpp
@@ -110,6 +110,8 @@ public:
     GeoDataLatLonBox m_cachedLatLonBox;
     QSet<qint64> m_highlightedRouteRelations;
     GeoDataRelation::RelationTypes m_visibleRelationTypes;
+    bool m_levelTagDebugModeEnabled;
+    int m_levelToDebug;
 };
 
 GeometryLayerPrivate::GeometryLayerPrivate(const QAbstractItemModel *model, const \
StyleBuilder *styleBuilder) : @@ -119,7 +121,9 @@ \
GeometryLayerPrivate::GeometryLayerPrivate(const QAbstractItemModel *model, cons  \
m_lastFeatureAt(nullptr),  m_dirty(true),
     m_cachedItemCount(0),
-    m_visibleRelationTypes(GeoDataRelation::RouteFerry)
+    m_visibleRelationTypes(GeoDataRelation::RouteFerry),
+    m_levelTagDebugModeEnabled(false),
+    m_levelToDebug(0)
 {
 }
 
@@ -248,6 +252,21 @@ bool GeometryLayer::render(GeoPainter *painter, ViewportParams \
*viewport,  AbstractGeoPolygonGraphicsItem::s_previousStyle = 0;
         GeoLineStringGraphicsItem::s_previousStyle = 0;
         for (auto item: layerItems) {
+            if (d->m_levelTagDebugModeEnabled) {
+                if (const auto placemark = \
geodata_cast<GeoDataPlacemark>(item->feature())) { +                    if \
(!placemark->hasOsmData()) { +                        continue;
+                    }
+                    QHash<QString, QString>::const_iterator tagIter = \
placemark->osmData().findTag(QStringLiteral("level")); +                    if \
(tagIter == placemark->osmData().tagsEnd()) { +                        continue;
+                    }
+                    const int val = tagIter.value().toInt();
+                    if (val != d->m_levelToDebug) {
+                        continue;
+                    }
+                }
+            }
             item->paint(painter, viewport, layer, d->m_tileLevel);
         }
     }
@@ -667,6 +686,32 @@ void GeometryLayer::handleHighlight(qreal lon, qreal lat, \
GeoDataCoordinates::Un  emit highlightedPlacemarksChanged(selectedPlacemarks);
 }
 
+void GeometryLayer::setLevelTagDebugModeEnabled(bool enabled)
+{
+    if (d->m_levelTagDebugModeEnabled != enabled) {
+        d->m_levelTagDebugModeEnabled = enabled;
+        emit repaintNeeded();
+    }
+}
+
+bool GeometryLayer::levelTagDebugModeEnabled() const
+{
+    return d->m_levelTagDebugModeEnabled;
+}
+
+void GeometryLayer::setDebugLevelTag(int level)
+{
+    if (d->m_levelToDebug != level) {
+        d->m_levelToDebug = level;
+        emit repaintNeeded();
+    }
+}
+
+int GeometryLayer::debugLevelTag() const
+{
+    return d->m_levelToDebug;
+}
+
 }
 
 #include "moc_GeometryLayer.cpp"
diff --git a/src/lib/marble/layers/GeometryLayer.h \
b/src/lib/marble/layers/GeometryLayer.h index 849ae8d48..0f2055e66 100644
--- a/src/lib/marble/layers/GeometryLayer.h
+++ b/src/lib/marble/layers/GeometryLayer.h
@@ -58,6 +58,14 @@ public:
 
     void setVisibleRelationTypes(GeoDataRelation::RelationTypes relationTypes);
 
+    void setLevelTagDebugModeEnabled(bool enabled);
+
+    bool levelTagDebugModeEnabled() const;
+
+    void setDebugLevelTag(int level);
+
+    int debugLevelTag() const;
+
 public Q_SLOTS:
     void addPlacemarks( const QModelIndex& index, int first, int last );
     void removePlacemarks( const QModelIndex& index, int first, int last );


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

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