[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[vidalia-svn] r3589: Bring our patched Marble up to date with Marble trunk. (in marble/trunk: . examples examples/python src src/bindings/python/sip src/lib src/lib/Projections src/lib/geodata/handlers/osm-namefinder src/lib/runners src/plasmoid src/plugins/designer/latloneditwidget src/plugins/render/fileview src/plugins/render/navigation src/plugins/render/panoramio src/plugins/render/twitter tools/iau2kml)
Author: edmanm
Date: 2009-02-24 15:37:32 -0500 (Tue, 24 Feb 2009)
New Revision: 3589
Added:
marble/trunk/src/plugins/render/panoramio/Panoramio.py
Removed:
marble/trunk/src/lib/jsonparser.cpp
marble/trunk/src/lib/jsonparser.h
Modified:
marble/trunk/CMakeLists.txt
marble/trunk/MarbleMacros.cmake
marble/trunk/examples/example1.ui
marble/trunk/examples/example2.ui
marble/trunk/examples/python/simple_marble.py
marble/trunk/src/CMakeLists.txt
marble/trunk/src/KdeMainWindow.cpp
marble/trunk/src/KdeMainWindow.h
marble/trunk/src/QtMainWindow.cpp
marble/trunk/src/bindings/python/sip/GeoDocument.sip
marble/trunk/src/bindings/python/sip/MarbleRenderPluginInterface.sip
marble/trunk/src/lib/CMakeLists.txt
marble/trunk/src/lib/CacheStoragePolicy.cpp
marble/trunk/src/lib/ExtDateTime.h
marble/trunk/src/lib/FileStoragePolicy.cpp
marble/trunk/src/lib/GeoPainter.cpp
marble/trunk/src/lib/GeoPolygon.cpp
marble/trunk/src/lib/HttpDownloadManager.cpp
marble/trunk/src/lib/HttpDownloadManager.h
marble/trunk/src/lib/HttpJob.cpp
marble/trunk/src/lib/HttpJob.h
marble/trunk/src/lib/MapThemeSortFilterProxyModel.cpp
marble/trunk/src/lib/MapThemeSortFilterProxyModel.h
marble/trunk/src/lib/MarbleMap.cpp
marble/trunk/src/lib/MarbleMap.h
marble/trunk/src/lib/MarbleModel.cpp
marble/trunk/src/lib/MarblePhysics.cpp
marble/trunk/src/lib/MarblePhysics.h
marble/trunk/src/lib/MarbleRenderPlugin.h
marble/trunk/src/lib/MarbleRenderPluginInterface.h
marble/trunk/src/lib/MarbleRunnerManager.cpp
marble/trunk/src/lib/MarbleRunnerManager.h
marble/trunk/src/lib/MarbleWidget.cpp
marble/trunk/src/lib/MarbleWidget.h
marble/trunk/src/lib/MarbleWidgetInputHandler.cpp
marble/trunk/src/lib/MarbleWidgetInputHandler.h
marble/trunk/src/lib/PlaceMarkInfoDialog.ui
marble/trunk/src/lib/PlaceMarkManager.cpp
marble/trunk/src/lib/PlanetaryConstants.h
marble/trunk/src/lib/PluginManager.cpp
marble/trunk/src/lib/Projections/SphericalProjection.cpp
marble/trunk/src/lib/Projections/SphericalProjection.h
marble/trunk/src/lib/SunControlWidget.cpp
marble/trunk/src/lib/SunControlWidget.h
marble/trunk/src/lib/SunLocator.cpp
marble/trunk/src/lib/SunLocator.h
marble/trunk/src/lib/TextureColorizer.h
marble/trunk/src/lib/TileLoader.cpp
marble/trunk/src/lib/TinyWebBrowser.cpp
marble/trunk/src/lib/TinyWebBrowser.h
marble/trunk/src/lib/geodata/handlers/osm-namefinder/NamedTagHandler.cpp
marble/trunk/src/lib/global.h
marble/trunk/src/lib/runners/LatLonRunner.cpp
marble/trunk/src/lib/runners/LatLonRunner.h
marble/trunk/src/lib/runners/MarbleAbstractRunner.cpp
marble/trunk/src/lib/runners/MarbleAbstractRunner.h
marble/trunk/src/lib/runners/OnfRunner.cpp
marble/trunk/src/lib/runners/OnfRunner.h
marble/trunk/src/marble.kcfg
marble/trunk/src/marble_part.cpp
marble/trunk/src/plasmoid/worldclock.cpp
marble/trunk/src/plugins/designer/latloneditwidget/LatLonEditPlugin.cpp
marble/trunk/src/plugins/render/fileview/FileViewFloatItem.cpp
marble/trunk/src/plugins/render/navigation/NavigationFloatItem.cpp
marble/trunk/src/plugins/render/panoramio/PanoramioPlugin.cpp
marble/trunk/src/plugins/render/panoramio/jsonparser.cpp
marble/trunk/src/plugins/render/panoramio/jsonparser.h
marble/trunk/src/plugins/render/twitter/jsonparser.cpp
marble/trunk/src/plugins/render/twitter/jsonparser.h
marble/trunk/src/plugins/render/twitter/twitterPlugin.cpp
marble/trunk/src/plugins/render/twitter/twitterPlugin.h
marble/trunk/src/qtmain.cpp
marble/trunk/tools/iau2kml/iau2kml.cpp
Log:
Bring our patched Marble up to date with Marble trunk.
Modified: marble/trunk/CMakeLists.txt
===================================================================
--- marble/trunk/CMakeLists.txt 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/CMakeLists.txt 2009-02-24 20:37:32 UTC (rev 3589)
@@ -9,6 +9,15 @@
# if this option is set, srtm.jpg will not be installed but the generated tiles instead
option(TILES_AT_COMPILETIME "generate the srtm tiles at compiletime" ON)
+####################################################
+# Build a D-Bus interface for marble
+# This is disabled by default for all win32, apple and Qt-Only builds
+if( QTONLY OR WIN32 OR APPLE)
+ option(BUILD_WITH_DBUS "Build the D-Bus interface for the Marble widget" OFF)
+else( QTONLY OR WIN32 OR APPLE )
+ option(BUILD_WITH_DBUS "Build the D-Bus interface for the Marble widget" ON)
+endif( QTONLY OR WIN32 OR APPLE )
+
###################################################
# Check if KDE4 is available
if( NOT QTONLY AND NOT KDE4_FOUND )
@@ -88,8 +97,8 @@
SET( MACOSX_BUNDLE_SHORT_VERSION_STRING 0.3.0 )
SET( MACOSX_BUNDLE_VERSION 0.3.0 )
SET( MACOSX_BUNDLE_LONG_VERSION_STRING Version 0.3.0 )
- #SET( CMAKE_OSX_ARCHITECTURES ppc;i386 ) #Comment out if not universal binary
- SET( CMAKE_OSX_ARCHITECTURES i386 ) #Comment out if universal binary
+ SET( CMAKE_OSX_ARCHITECTURES ppc;i386 ) #Comment out if not universal binary
+ #SET( CMAKE_OSX_ARCHITECTURES i386 ) #Comment out if universal binary
#SET (lib_dir ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents/MacOS/lib)
SET (data_dir ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents/MacOS/resources/data)
SET (plugin_dir ${CMAKE_INSTALL_PREFIX}/Marble.app/Contents/MacOS/resources/plugins)
@@ -233,7 +242,7 @@
# distinguish between debug and release plugin
SET(CMAKE_DEBUG_POSTFIX "d")
endif(WIN32)
-
+add_definitions("-DDEBUG_TAGS")
####################################################
# add cmake macros
include( MarbleMacros )
Modified: marble/trunk/MarbleMacros.cmake
===================================================================
--- marble/trunk/MarbleMacros.cmake 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/MarbleMacros.cmake 2009-02-24 20:37:32 UTC (rev 3589)
@@ -95,7 +95,7 @@
macro( marble_add_test TEST_NAME )
if( BUILD_MARBLE_TESTS )
- set( ${TEST_NAME}_SRCS ${TEST_NAME}.cpp )
+ set( ${TEST_NAME}_SRCS ${TEST_NAME}.cpp ${ARGN} )
if( QTONLY )
qt4_generate_moc( ${TEST_NAME}.cpp ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.moc )
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
Modified: marble/trunk/examples/example1.ui
===================================================================
--- marble/trunk/examples/example1.ui 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/examples/example1.ui 2009-02-24 20:37:32 UTC (rev 3589)
@@ -48,7 +48,7 @@
</widget>
</item>
<item rowspan="2" row="0" column="1" >
- <widget class="MarbleWidget" name="MarbleWidget" >
+ <widget class="Marble::MarbleWidget" name="MarbleWidget" >
<property name="toolTip" >
<string>The Earth</string>
</property>
@@ -69,7 +69,7 @@
</widget>
<customwidgets>
<customwidget>
- <class>MarbleWidget</class>
+ <class>Marble::MarbleWidget</class>
<extends>QWidget</extends>
<header>MarbleWidget.h</header>
</customwidget>
Modified: marble/trunk/examples/example2.ui
===================================================================
--- marble/trunk/examples/example2.ui 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/examples/example2.ui 2009-02-24 20:37:32 UTC (rev 3589)
@@ -28,7 +28,7 @@
<number>0</number>
</property>
<item>
- <widget class="MarbleNavigator" name="MarbleNavigator" >
+ <widget class="Marble::MarbleNavigator" name="MarbleNavigator" >
<property name="toolTip" >
<string>Navigation Control</string>
</property>
@@ -38,7 +38,7 @@
</widget>
</item>
<item>
- <widget class="MarbleWidget" name="MarbleWidget" >
+ <widget class="Marble::MarbleWidget" name="MarbleWidget" >
<property name="toolTip" >
<string>The Earth</string>
</property>
@@ -193,12 +193,12 @@
</widget>
<customwidgets>
<customwidget>
- <class>MarbleNavigator</class>
+ <class>Marble::MarbleNavigator</class>
<extends>QWidget</extends>
<header>MarbleNavigator.h</header>
</customwidget>
<customwidget>
- <class>MarbleWidget</class>
+ <class>Marble::MarbleWidget</class>
<extends>QWidget</extends>
<header>MarbleWidget.h</header>
</customwidget>
Modified: marble/trunk/examples/python/simple_marble.py
===================================================================
--- marble/trunk/examples/python/simple_marble.py 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/examples/python/simple_marble.py 2009-02-24 20:37:32 UTC (rev 3589)
@@ -1,20 +1,24 @@
#!env python
#
-# Copyright 2008 Simon Edwards <simon@xxxxxxxxxxxxx>
+# Copyright 2008 Simon Edwards <simon@xxxxxxxxxxxxx>
#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
+# This file is part of the Marble Desktop Globe.
#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
+# This library is free software you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation either
+# version 2 of the License, or (at your option) any later version.
#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
#
+# You should have received a copy of the GNU Library General Public License
+# aint with this library see the file COPYING.LIB. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+#
# A very simple example of how to use the marble widget.
from PyQt4.QtCore import *
Modified: marble/trunk/src/CMakeLists.txt
===================================================================
--- marble/trunk/src/CMakeLists.txt 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/CMakeLists.txt 2009-02-24 20:37:32 UTC (rev 3589)
@@ -4,6 +4,10 @@
add_definitions(-D_USE_MATH_DEFINES=1)
endif(MSVC)
+if(BUILD_WITH_DBUS)
+add_definitions(-DMARBLE_DBUS)
+endif(BUILD_WITH_DBUS)
+
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/lib
Modified: marble/trunk/src/KdeMainWindow.cpp
===================================================================
--- marble/trunk/src/KdeMainWindow.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/KdeMainWindow.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -12,9 +12,13 @@
// Own
#include "KdeMainWindow.h"
+// Qt
+#include <QtGui/QProgressBar>
+
// KDE
#include <kaction.h>
#include <kactioncollection.h>
+#include <kstatusbar.h>
#include <kparts/part.h>
#include <kparts/componentfactory.h>
@@ -26,6 +30,9 @@
// Local dir
#include "ControlView.h"
+#include "HttpDownloadManager.h"
+#include "MarbleMap.h"
+#include "MarbleModel.h"
#include "marble_part.h"
namespace Marble
@@ -52,6 +59,7 @@
connect( marbleWidget(), SIGNAL( themeChanged( QString ) ),
this, SLOT( setMapTitle() ) );
+ initStatusBar();
}
MainWindow::~MainWindow()
@@ -59,6 +67,63 @@
delete m_part;
}
+void MainWindow::initStatusBar()
+{
+ initDownloadProgressBar();
+}
+
+void MainWindow::initDownloadProgressBar()
+{
+ // get status bar and add progress widget
+ KStatusBar * const status_bar = statusBar();
+ qDebug() << "got status bar:" << status_bar;
+ m_downloadProgressBar = new QProgressBar;
+ status_bar->addPermanentWidget( m_downloadProgressBar );
+
+ HttpDownloadManager * const downloadManager =
+ m_part->controlView()->marbleWidget()->map()->model()->downloadManager();
+ qDebug() << "got download manager:" << downloadManager;
+
+ connect( downloadManager, SIGNAL( jobAdded( int )),
+ this, SLOT( downloadProgressJobAdded( int )));
+ connect( downloadManager, SIGNAL( downloadComplete( QString, QString )),
+ this, SLOT( downloadProgressJobCompleted( QString, QString )));
+}
+
+QProgressBar* MainWindow::downloadProgressBar() const
+{
+ return m_downloadProgressBar;
+}
+
+void MainWindow::downloadProgressJobAdded( int totalJobs )
+{
+ m_downloadProgressBar->setUpdatesEnabled( false );
+ if ( m_downloadProgressBar->value() < 0 ) {
+ m_downloadProgressBar->setMaximum( 1 );
+ m_downloadProgressBar->setValue( 0 );
+ } else {
+ m_downloadProgressBar->setMaximum( m_downloadProgressBar->maximum() + 1 );
+ }
+
+ qDebug() << "downloadProgressJobAdded: value/maximum: "
+ << m_downloadProgressBar->value() << '/' << m_downloadProgressBar->maximum();
+
+ m_downloadProgressBar->setUpdatesEnabled( true );
+}
+
+void MainWindow::downloadProgressJobCompleted( QString, QString )
+{
+ m_downloadProgressBar->setUpdatesEnabled( false );
+ m_downloadProgressBar->setValue( m_downloadProgressBar->value() + 1 );
+ if ( m_downloadProgressBar->value() == m_downloadProgressBar->maximum() )
+ m_downloadProgressBar->reset();
+
+ qDebug() << "downloadProgressJobCompleted: value/maximum: "
+ << m_downloadProgressBar->value() << '/' << m_downloadProgressBar->maximum();
+
+ m_downloadProgressBar->setUpdatesEnabled( true );
+}
+
ControlView* MainWindow::marbleControl() const
{
return m_part->controlView();
Modified: marble/trunk/src/KdeMainWindow.h
===================================================================
--- marble/trunk/src/KdeMainWindow.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/KdeMainWindow.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -16,6 +16,8 @@
#include <KXmlGuiWindow>
+class QProgressBar;
+
namespace Marble
{
@@ -32,14 +34,20 @@
QWidget *parent = 0 );
~MainWindow();
+ QProgressBar* downloadProgressBar() const;
ControlView* marbleControl() const;
MarbleWidget* marbleWidget() const;
public slots:
+ void downloadProgressJobAdded( int );
+ void downloadProgressJobCompleted( QString, QString );
void setMapTitle();
private:
+ void initStatusBar();
+ void initDownloadProgressBar();
MarblePart *m_part;
+ QProgressBar *m_downloadProgressBar;
};
}
Modified: marble/trunk/src/QtMainWindow.cpp
===================================================================
--- marble/trunk/src/QtMainWindow.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/QtMainWindow.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -482,32 +482,42 @@
#else
QSettings settings("KDE", "Marble Desktop Globe");
#endif
-
settings.beginGroup("MainWindow");
resize(settings.value("size", QSize(640, 480)).toSize());
move(settings.value("pos", QPoint(200, 200)).toPoint());
showFullScreen(settings.value("fullScreen", false ).toBool());
showSideBar(settings.value("sideBar", true ).toBool());
showStatusBar(settings.value("statusBar", false ).toBool());
+ show();
showClouds(settings.value("showClouds", true ).toBool());
workOffline(settings.value("workOffline", false ).toBool());
showAtmosphere(settings.value("showAtmosphere", true ).toBool());
settings.endGroup();
+ setUpdatesEnabled(false);
+
settings.beginGroup("MarbleWidget");
+ QString mapThemeId = settings.value("mapTheme", "" ).toString();
+ qDebug() << "ReadSettings: mapThemeId: " << mapThemeId;
+ m_controlView->marbleWidget()->setMapThemeId( mapThemeId );
+ m_controlView->marbleWidget()->setProjection(
+ (Projection)(settings.value("projection", 0 ).toInt())
+ );
m_controlView->marbleWidget()->setHome(
settings.value("homeLongitude", 9.4).toDouble(),
settings.value("homeLatitude", 54.8).toDouble(),
settings.value("homeZoom", 1050 ).toInt()
);
m_controlView->marbleWidget()->goHome();
- QString mapThemeId = settings.value("mapTheme", "" ).toString();
- qDebug() << "ReadSettings: mapThemeId: " << mapThemeId;
- m_controlView->marbleWidget()->setMapThemeId( mapThemeId );
- m_controlView->marbleWidget()->setProjection(
- (Projection)(settings.value("projection", 0 ).toInt())
- );
settings.endGroup();
+
+ settings.beginGroup( "Sun" );
+ m_controlView->sunLocator()->setShow( settings.value( "showSun", false ).toBool() );
+ m_controlView->sunLocator()->setCitylights( settings.value( "showCitylights", false ).toBool() );
+ m_controlView->sunLocator()->setCentered( settings.value( "centerOnSun", false ).toBool() );
+ settings.endGroup();
+
+ setUpdatesEnabled(true);
}
void MainWindow::writeSettings()
@@ -544,6 +554,12 @@
settings.setValue( "mapTheme", mapTheme );
settings.setValue( "projection", projection );
settings.endGroup();
+
+ settings.beginGroup( "Sun" );
+ settings.setValue( "showSun", m_controlView->sunLocator()->getShow() );
+ settings.setValue( "showCitylights", m_controlView->sunLocator()->getCitylights() );
+ settings.setValue( "centerOnSun", m_controlView->sunLocator()->getCentered() );
+ settings.endGroup();
}
#include "QtMainWindow.moc"
Modified: marble/trunk/src/bindings/python/sip/GeoDocument.sip
===================================================================
--- marble/trunk/src/bindings/python/sip/GeoDocument.sip 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/bindings/python/sip/GeoDocument.sip 2009-02-24 20:37:32 UTC (rev 3589)
@@ -28,7 +28,6 @@
GeoDocument ();
public:
- unsigned long s_leakProtector;
virtual bool isGeoDataDocument () const;
virtual bool isGeoSceneDocument () const;
}; // GeoDocument
Modified: marble/trunk/src/bindings/python/sip/MarbleRenderPluginInterface.sip
===================================================================
--- marble/trunk/src/bindings/python/sip/MarbleRenderPluginInterface.sip 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/bindings/python/sip/MarbleRenderPluginInterface.sip 2009-02-24 20:37:32 UTC (rev 3589)
@@ -25,6 +25,7 @@
%End
public:
+ virtual Marble::MarbleRenderPlugin* instance() = 0;
virtual QStringList backendTypes () const = 0;
virtual QString renderPolicy () const = 0;
virtual QStringList renderPosition () const = 0;
Modified: marble/trunk/src/lib/CMakeLists.txt
===================================================================
--- marble/trunk/src/lib/CMakeLists.txt 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/CMakeLists.txt 2009-02-24 20:37:32 UTC (rev 3589)
@@ -199,10 +199,10 @@
# link with release version of Qt libs
if (QTONLY)
ADD_LIBRARY(marblewidget SHARED ${marblewidget_SRCS} ${SOURCES_UI_HDRS})
- TARGET_LINK_LIBRARIES (marblewidget ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTSVG_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTSCRIPT_LIBRARY} ${QT_QTMAIN_LIBRARY} )
+ TARGET_LINK_LIBRARIES (marblewidget ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTSVG_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTSCRIPT_LIBRARY} ${QT_QTMAIN_LIBRARY} ${QT_QTWEBKIT_LIBRARY} )
else (QTONLY)
KDE4_ADD_LIBRARY(marblewidget SHARED ${marblewidget_SRCS} ${SOURCES_UI_HDRS})
- TARGET_LINK_LIBRARIES (marblewidget ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTSVG_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${KDE4_KDECORE_LIBRARY} ${KDE4_KDEUI_LIBRARY} ${KDE4_KIO_LIBRARY} ${QT_QTMAIN_LIBRARY} ${QT_QTSCRIPT_LIBRARY} )
+ TARGET_LINK_LIBRARIES (marblewidget ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTSVG_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${KDE4_KDECORE_LIBRARY} ${KDE4_KDEUI_LIBRARY} ${KDE4_KIO_LIBRARY} ${QT_QTMAIN_LIBRARY} ${QT_QTSCRIPT_LIBRARY} ${QT_QTWEBKIT_LIBRARY} )
endif (QTONLY)
if (APPLE)
Modified: marble/trunk/src/lib/CacheStoragePolicy.cpp
===================================================================
--- marble/trunk/src/lib/CacheStoragePolicy.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/CacheStoragePolicy.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -36,7 +36,7 @@
bool CacheStoragePolicy::updateFile( const QString &fileName, const QByteArray &data )
{
if ( !m_cache.insert( fileName, data ) ) {
- m_errorMsg = "Unable to insert data into cache";
+ m_errorMsg = QObject::tr("Unable to insert data into cache");
return false;
}
Modified: marble/trunk/src/lib/ExtDateTime.h
===================================================================
--- marble/trunk/src/lib/ExtDateTime.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/ExtDateTime.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -61,6 +61,11 @@
void setDateTime(QDateTime datetime);
/**
+ * @brief Returns the speed of the timer
+ **/
+ int getSpeed() {return m_speed;};
+
+ /**
* @brief Sets the speed of the timer
* @param speed The new speed (integer)
**/
Modified: marble/trunk/src/lib/FileStoragePolicy.cpp
===================================================================
--- marble/trunk/src/lib/FileStoragePolicy.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/FileStoragePolicy.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -100,6 +100,11 @@
while (itTheme.hasNext()) {
itTheme.next();
QString tileDirectory = itTheme.filePath();
+
+ if ( itTheme.fileName().toInt() < 5 ) {
+ continue;
+ }
+
QDirIterator itTile( tileDirectory, QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories );
while (itTile.hasNext()) {
itTile.next();
Modified: marble/trunk/src/lib/GeoPainter.cpp
===================================================================
--- marble/trunk/src/lib/GeoPainter.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/GeoPainter.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -24,7 +24,6 @@
#include "ViewportParams.h"
// #define MARBLE_DEBUG
-// #define GEOPAINTER_DEBUG
namespace Marble
@@ -386,13 +385,10 @@
QVector<QPolygonF*> polygons;
d->createPolygonsFromLineString( lineString, polygons );
+ qDebug() << "Number of polygons:" << polygons.count();
+
foreach( QPolygonF* itPolygon, polygons ) {
- // Using QPainter instead of ClipPainter until some bugs are fixed.
-#ifdef GEOPAINTER_DEBUG
- QPainter::drawPolyline( *itPolygon );
-#else
ClipPainter::drawPolyline( *itPolygon );
-#endif
}
qDeleteAll( polygons );
@@ -412,12 +408,7 @@
d->createPolygonsFromLinearRing( linearRing, polygons );
foreach( QPolygonF* itPolygon, polygons ) {
- // Using QPainter instead of ClipPainter until some bugs are fixed.
-#ifdef GEOPAINTER_DEBUG
- QPainter::drawPolygon( *itPolygon );
-#else
ClipPainter::drawPolygon( *itPolygon );
-#endif
}
qDeleteAll( polygons );
@@ -456,12 +447,7 @@
}
foreach( QPolygonF* itOuterPolygon, outerPolygons ) {
- // Using QPainter instead of ClipPainter until some bugs are fixed.
-#ifdef GEOPAINTER_DEBUG
- QPainter::drawPolygon( *itOuterPolygon );
-#else
ClipPainter::drawPolygon( *itOuterPolygon );
-#endif
}
qDeleteAll( outerPolygons );
Modified: marble/trunk/src/lib/GeoPolygon.cpp
===================================================================
--- marble/trunk/src/lib/GeoPolygon.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/GeoPolygon.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -112,7 +112,10 @@
}
PntMap::~PntMap()
-{
+{
+ if ( m_loader ) {
+ m_loader->wait();
+ }
qDeleteAll( begin(), end() );
}
@@ -126,8 +129,10 @@
void PntMap::setInitialized( bool isInitialized )
{
- if ( m_loader->isFinished() )
+ if ( m_loader->isFinished() ) {
delete m_loader;
+ m_loader = 0;
+ }
m_isInitialized = isInitialized;
emit initialized();
Modified: marble/trunk/src/lib/HttpDownloadManager.cpp
===================================================================
--- marble/trunk/src/lib/HttpDownloadManager.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/HttpDownloadManager.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -13,6 +13,7 @@
#include "HttpDownloadManager.h"
#include <QtCore/QDebug>
+#include <QtCore/QTimer>
#include "HttpJob.h"
#include "MarbleDirs.h"
@@ -124,9 +125,19 @@
return false;
}
}
+
+ QList<HttpJob*>::iterator i = m_waitingQueue.begin();
+ QList<HttpJob*>::iterator iEnd = m_waitingQueue.end();
+ for (; i != iEnd; ++i) {
+ if ( job->originalDestinationFileName() == (*i)->originalDestinationFileName() ) {
+ qDebug() << "Download rejected: Will try to download again in some time.";
+ (*i)->setInitiatorId( job->initiatorId() );
+ return false;
+ }
+ }
- QList<HttpJob*>::iterator i = m_activatedJobList.begin();
- QList<HttpJob*>::iterator iEnd = m_activatedJobList.end();
+ i = m_activatedJobList.begin();
+ iEnd = m_activatedJobList.end();
for (; i != iEnd; ++i ) {
if ( job->originalDestinationFileName() == (*i)->originalDestinationFileName() ) {
qDebug() << "Download rejected: It's being downloaded already.";
@@ -145,6 +156,7 @@
}
}
+ emit jobAdded( m_jobQueue.size() + m_activatedJobList.size() );
return true;
}
@@ -176,6 +188,11 @@
job->setStoragePolicy( storagePolicy() );
job->setStatus( Activated );
+ // No duplicate connections please
+ disconnect( job, SIGNAL( jobDone( Marble::HttpJob*, int ) ),
+ this, SLOT( reportResult( Marble::HttpJob*, int ) ) );
+ disconnect( job, SIGNAL( statusMessage( QString ) ),
+ this, SIGNAL( statusMessage( QString ) ) );
connect( job, SIGNAL( jobDone( Marble::HttpJob*, int ) ),
this, SLOT( reportResult( Marble::HttpJob*, int ) ) );
connect( job, SIGNAL( statusMessage( QString ) ),
@@ -192,11 +209,26 @@
if ( pos >= 0 ) {
m_activatedJobList.removeAt( pos );
- m_jobBlackList.push_back( job );
-
- qDebug() << QString( "Download of %1 Blacklisted. Number of blacklist items: %2" )
- .arg( job->destinationFileName() ).arg( m_jobBlackList.size() );
- }
+
+ // This should always return true
+ if( !m_waitingQueue.contains( job ) ) {
+ if( job->tryAgain() )
+ {
+ m_waitingQueue.enqueue( job );
+ qDebug() << QString( "Download of %1 failed, but trying again in one minute" )
+ .arg( job->destinationFileName() );
+ job->setStatus( NoStatus );
+ QTimer::singleShot( 60000, this, SLOT( requeue() ) ); // 60000 ms = 1 min
+ }
+ else
+ {
+ m_jobBlackList.push_back( job );
+
+ qDebug() << QString( "Download of %1 Blacklisted. Number of blacklist items: %2" )
+ .arg( job->destinationFileName() ).arg( m_jobBlackList.size() );
+ }
+ }
+ }
}
else {
// qDebug() << "HttpDownloadManager: Download Complete:"
@@ -204,7 +236,20 @@
emit downloadComplete( job->originalDestinationFileName(), job->initiatorId() );
removeJob( job );
}
+
+ activateJobs();
+}
+void HttpDownloadManager::requeue()
+{
+ if( !m_waitingQueue.isEmpty() ) {
+ HttpJob* job = m_waitingQueue.dequeue();
+ qDebug() << QString( "Requeuing %1." ).arg( job->destinationFileName() );
+ addJob( job );
+ }
+ else {
+ qDebug() << QString( "Warning: For some reason we requeued more jobs as needed" );
+ }
}
HttpJob *HttpDownloadManager::createJob( const QUrl& sourceUrl, const QString& destFileName,
Modified: marble/trunk/src/lib/HttpDownloadManager.h
===================================================================
--- marble/trunk/src/lib/HttpDownloadManager.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/HttpDownloadManager.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -22,6 +22,7 @@
#include <QtCore/QUrl>
#include <QtCore/QList>
#include <QtCore/QStack>
+#include <QtCore/QQueue>
#include "marble_export.h"
@@ -98,10 +99,16 @@
Q_SIGNALS:
void downloadComplete( QString, QString );
void statusMessage( QString );
+ /**
+ * Signal is emitted when a new job is added to the queue and the parameter
+ * contains the number of total jobs which are currently in the queue.
+ */
+ void jobAdded( int );
private Q_SLOTS:
void activateJobs();
void reportResult( Marble::HttpJob *job, int id );
+ void requeue();
private:
Q_DISABLE_COPY( HttpDownloadManager )
@@ -118,6 +125,7 @@
bool m_downloadEnabled;
QStack<HttpJob*> m_jobQueue;
+ QQueue<HttpJob*> m_waitingQueue;
QList<HttpJob*> m_activatedJobList;
QList<HttpJob*> m_jobBlackList;
Modified: marble/trunk/src/lib/HttpJob.cpp
===================================================================
--- marble/trunk/src/lib/HttpJob.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/HttpJob.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -29,6 +29,7 @@
Status m_status;
Priority m_priority;
StoragePolicy *m_storagePolicy;
+ int m_trialsLeft;
};
HttpJobPrivate::HttpJobPrivate()
@@ -46,6 +47,7 @@
d->m_destinationFileName = destFileName;
d->m_originalDestinationFileName = destFileName;
d->m_initiatorId = id;
+ d->m_trialsLeft = 3;
}
HttpJob::~HttpJob()
@@ -107,4 +109,15 @@
return d->m_storagePolicy;
}
+bool HttpJob::tryAgain()
+{
+ if( d->m_trialsLeft > 0 ) {
+ d->m_trialsLeft--;
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
#include "HttpJob.moc"
Modified: marble/trunk/src/lib/HttpJob.h
===================================================================
--- marble/trunk/src/lib/HttpJob.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/HttpJob.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -54,6 +54,8 @@
void setStatus( const Status );
void setStoragePolicy( StoragePolicy * );
+
+ bool tryAgain();
Q_SIGNALS:
void jobDone( Marble::HttpJob *, int );
Modified: marble/trunk/src/lib/MapThemeSortFilterProxyModel.cpp
===================================================================
--- marble/trunk/src/lib/MapThemeSortFilterProxyModel.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MapThemeSortFilterProxyModel.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -1,3 +1,14 @@
+//
+// This file is part of the Marble Desktop Globe.
+//
+// This program is free software licensed under the GNU LGPL. You can
+// find a copy of this license in LICENSE.txt in the top directory of
+// the source code.
+//
+// Copyright 2008 Claudiu Covaci <claudiu.covaci@xxxxxxxxx>"
+// Copyright 2009 Torsten Rahn <tackat@xxxxxxx>"
+//
+
#include "MapThemeSortFilterProxyModel.h"
#include <QtCore/QString>
Modified: marble/trunk/src/lib/MapThemeSortFilterProxyModel.h
===================================================================
--- marble/trunk/src/lib/MapThemeSortFilterProxyModel.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MapThemeSortFilterProxyModel.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -6,6 +6,7 @@
// the source code.
//
// Copyright 2008 Claudiu Covaci <claudiu.covaci@xxxxxxxxx>"
+// Copyright 2009 Torsten Rahn <tackat@xxxxxxx>"
//
#ifndef MAPTHEMESORTFILTERPROXYMODEL_H
Modified: marble/trunk/src/lib/MarbleMap.cpp
===================================================================
--- marble/trunk/src/lib/MarbleMap.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleMap.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -27,7 +27,9 @@
#include <QtGui/QSizePolicy>
#include <QtGui/QRegion>
-//#include <QtDBus/QDBusConnection>
+#ifdef MARBLE_DBUS
+#include <QtDBus/QDBusConnection>
+#endif
// Marble
#include "AbstractProjection.h"
@@ -73,7 +75,6 @@
m_persistentTileCacheLimit( 1024*1024*300 ), // 300 MB
m_volatileTileCacheLimit( 1024*1024*30 ) // 30 MB
{
- /* NOOP */
}
void MarbleMapPrivate::construct()
@@ -107,9 +108,9 @@
m_parent->connect( m_model->sunLocator(), SIGNAL( updateSun() ),
- m_parent, SLOT( updateSun() ) );
+ m_parent, SLOT( updateSun() ) );
m_parent->connect( m_model->sunLocator(), SIGNAL( centerSun() ),
- m_parent, SLOT( centerSun() ) );
+ m_parent, SLOT( centerSun() ) );
}
// Used to be resizeEvent()
@@ -138,13 +139,15 @@
QPixmap logoPixmap( MarbleDirs::path( "svg/marble-logo-inverted-72dpi.png" ) );
- if ( logoPixmap.width() > m_parent->width() * 0.7 || logoPixmap.height() > m_parent->height() * 0.7 )
+ if ( logoPixmap.width() > m_parent->width() * 0.7
+ || logoPixmap.height() > m_parent->height() * 0.7 )
{
- logoPixmap = logoPixmap.scaled( QSize( m_parent->width(), m_parent->height() ) * 0.7, Qt::KeepAspectRatio, Qt::SmoothTransformation );
+ logoPixmap = logoPixmap.scaled( QSize( m_parent->width(), m_parent->height() ) * 0.7,
+ Qt::KeepAspectRatio, Qt::SmoothTransformation );
}
- QPoint logoPosition( ( m_parent->width() - logoPixmap.width() ) / 2 ,
- ( m_parent->height() - logoPixmap.height() ) / 2 );
+ QPoint logoPosition( ( m_parent->width() - logoPixmap.width() ) / 2,
+ ( m_parent->height() - logoPixmap.height() ) / 2 );
painter.drawPixmap( logoPosition, logoPixmap );
QString message; // "Please assign a map theme!";
@@ -271,8 +274,7 @@
void MarbleMapPrivate::paintGround( GeoPainter &painter, QRect &dirtyRect )
{
- if ( !m_viewParams.mapTheme() )
- {
+ if ( !m_viewParams.mapTheme() ) {
qDebug() << "No theme yet!";
paintMarbleSplash( painter, dirtyRect );
return;
@@ -284,28 +286,26 @@
|| m_viewParams.radius() > m_viewParams.canvasImage()->height() / 2 );
m_model->paintGlobe( &painter,
- m_parent->width(), m_parent->height(), &m_viewParams,
- m_parent->needsUpdate()
- || m_viewParams.canvasImage()->isNull(),
- dirtyRect );
+ m_parent->width(), m_parent->height(), &m_viewParams,
+ m_parent->needsUpdate() || m_viewParams.canvasImage()->isNull(),
+ dirtyRect );
// FIXME: this is ugly, add method updatePlanetAxis() to ViewParams
m_viewParams.setPlanetAxisUpdated( m_viewParams.planetAxis() );
// FIXME: this is ugly, add method updateRadius() to ViewParams
m_viewParams.setRadiusUpdated( m_viewParams.radius() );
- m_justModified = false;
+ m_justModified = false;
// FIXME: This is really slow. That's why we defer this to
// PrintQuality. Either cache on a pixmap - or maybe
// better: Add to GlobeScanlineTextureMapper.
if ( m_viewParams.mapQuality() == Marble::Print )
- drawFog(painter);
+ drawFog( painter );
}
void MarbleMapPrivate::paintOverlay( GeoPainter &painter, QRect &dirtyRect)
{
- if ( !m_viewParams.mapTheme() )
- {
+ if ( !m_viewParams.mapTheme() ) {
return;
}
@@ -354,7 +354,10 @@
MarbleMap::MarbleMap()
: d( new MarbleMapPrivate( this ) )
{
-// QDBusConnection::sessionBus().registerObject("/marble", this, QDBusConnection::QDBusConnection::ExportAllSlots);
+#ifdef MARBLE_DBUS
+ QDBusConnection::sessionBus().registerObject("/MarbleMap", this,
+ QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals );
+#endif
QTime t;
t.start();
@@ -363,6 +366,9 @@
d->construct();
qDebug("Model: Time elapsed: %d ms", t.elapsed());
+
+ // FIXME: add method initDownloadManager
+ setDownloadUrl("");
}
@@ -375,6 +381,9 @@
d->m_modelIsOwned = false;
d->construct();
+
+ // FIXME: add method initDownloadManager
+ setDownloadUrl("");
}
MarbleMap::~MarbleMap()
@@ -788,7 +797,8 @@
selectionModel->clear();
if ( index.isValid() ) {
- const GeoDataCoordinates point = index.data( MarblePlacemarkModel::CoordinateRole ).value<GeoDataCoordinates>();
+ const GeoDataCoordinates point =
+ index.data( MarblePlacemarkModel::CoordinateRole ).value<GeoDataCoordinates>();
qreal lon;
qreal lat;
@@ -937,17 +947,17 @@
}
// Used to be paintEvent()
-void MarbleMap::paint(GeoPainter &painter, QRect &dirtyRect)
+void MarbleMap::paint(GeoPainter &painter, QRect &dirtyRect)
{
QTime t;
t.start();
- d->paintGround(painter, dirtyRect);
+ d->paintGround( painter, dirtyRect );
customPaint( &painter );
- d->paintOverlay(painter, dirtyRect);
+ d->paintOverlay( painter, dirtyRect );
qreal fps = 1000.0 / (qreal)( t.elapsed() );
- d->paintFps(painter, dirtyRect, fps);
+ d->paintFps( painter, dirtyRect, fps );
emit framesPerSecond( fps );
}
@@ -955,8 +965,7 @@
{
Q_UNUSED( painter );
- if ( !viewParams()->mapTheme() )
- {
+ if ( !viewParams()->mapTheme() ) {
return;
}
}
@@ -1122,11 +1131,10 @@
void MarbleMap::notifyMouseClick( int x, int y)
{
- bool valid = false;
qreal lon = 0;
qreal lat = 0;
- valid = geoCoordinates( x, y, lon, lat, GeoDataCoordinates::Radian );
+ const bool valid = geoCoordinates( x, y, lon, lat, GeoDataCoordinates::Radian );
if ( valid ) {
emit mouseClickGeoPosition( lon, lat, GeoDataCoordinates::Radian);
@@ -1136,8 +1144,7 @@
void MarbleMap::updateGps()
{
QRegion temp;
- bool draw;
- draw = d->m_model->gpsLayer()->updateGps( size(),&d->m_viewParams, temp );
+ const bool draw = d->m_model->gpsLayer()->updateGps( size(),&d->m_viewParams, temp );
#if 0 // FIXME: move to MarbleWidget?
if ( draw ) {
update(temp);
@@ -1202,7 +1209,7 @@
void MarbleMap::updateRegion( BoundingBox &box )
{
Q_UNUSED(box);
- //really not sure if this is nessary as its designed for
+ //really not sure if this is nessary as it is designed for
//placemark based layers
setNeedsUpdate();
@@ -1221,8 +1228,8 @@
if ( downloadManager != 0 )
downloadManager->setServerUrl( url );
else {
- downloadManager = new HttpDownloadManager( url,
- new FileStoragePolicy( MarbleDirs::localPath() ) );
+ downloadManager =
+ new HttpDownloadManager( url, new FileStoragePolicy( MarbleDirs::localPath() ) );
d->m_model->setDownloadManager( downloadManager );
}
}
@@ -1247,9 +1254,9 @@
QString distanceUnitString;
- Marble::DistanceUnit distanceUnit;
- distanceUnit = MarbleGlobal::getInstance()->locale()->distanceUnit();
+ const Marble::DistanceUnit distanceUnit = MarbleGlobal::getInstance()->locale()->distanceUnit();
+ // FIXME: why is "km" translated and "mi" not?
if ( distanceUnit == Marble::Metric ) {
distanceUnitString = tr("km");
}
@@ -1269,8 +1276,7 @@
Marble::AngleUnit MarbleMap::defaultAngleUnit() const
{
- if ( GeoDataCoordinates::defaultNotation() == GeoDataCoordinates::Decimal )
- {
+ if ( GeoDataCoordinates::defaultNotation() == GeoDataCoordinates::Decimal ) {
return Marble::DecimalDegree;
}
@@ -1279,8 +1285,7 @@
void MarbleMap::setDefaultAngleUnit( Marble::AngleUnit angleUnit )
{
- if ( angleUnit == Marble::DecimalDegree )
- {
+ if ( angleUnit == Marble::DecimalDegree ) {
GeoDataCoordinates::setDefaultNotation( GeoDataCoordinates::Decimal );
return;
}
Modified: marble/trunk/src/lib/MarbleMap.h
===================================================================
--- marble/trunk/src/lib/MarbleMap.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleMap.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -28,8 +28,6 @@
#include <QtGui/QFont>
#include <QtGui/QPixmap>
-//#include <QtDBus/QtDBus>
-
#include "marble_export.h"
#include "GeoDataCoordinates.h" // In geodata/data/
#include "global.h" // types needed in all of marble.
@@ -96,7 +94,7 @@
class MARBLE_EXPORT MarbleMap : public QObject
{
Q_OBJECT
- Q_CLASSINFO("D-Bus Interface", "org.kde.marble")
+ Q_CLASSINFO("D-Bus Interface", "org.kde.MarbleMap")
public:
Modified: marble/trunk/src/lib/MarbleModel.cpp
===================================================================
--- marble/trunk/src/lib/MarbleModel.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleModel.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -167,6 +167,7 @@
if( MarbleModelPrivate::refCounter == 1 ) {
d->m_veccomposer = new VectorComposer();
+ d->m_texcolorizer = 0;
/* d->m_texcolorizer is not initialized here since it takes a long time
to create the palette and it might not even be used. Instead it's created
in setMapTheme if the theme being loaded does need it. If the theme
@@ -230,7 +231,6 @@
if( MarbleModelPrivate::refCounter == 1 ) {
delete d->m_veccomposer;
delete d->m_texcolorizer;
- MarbleModelPrivate::refCounter.deref();
}
delete d->m_gridmap;
delete d->m_geometrymodel;
@@ -245,6 +245,7 @@
delete d->m_sunLocator;
delete d->m_dateTime;
delete d;
+ MarbleModelPrivate::refCounter.deref();
qDebug() << "Model deleted:" << this;
}
@@ -408,8 +409,17 @@
for (; itds != endds; ++itds) {
GeoSceneAbstractDataset* dataset = *itds;
if( dataset->fileFormat() == "KML" ) {
- loadedContainers.removeOne( reinterpret_cast<GeoSceneXmlDataSource*>(dataset)->filename() );
- loadList << reinterpret_cast<GeoSceneXmlDataSource*>(dataset)->filename();
+#if QT_VERSION >= 0x040400
+ loadedContainers.removeOne(
+reinterpret_cast<GeoSceneXmlDataSource*>(dataset)->filename() );
+#else
+ int index = loadedContainers.indexOf(
+reinterpret_cast<GeoSceneXmlDataSource*>(dataset)->filename() );
+ if (index != -1) {
+ loadedContainers.removeAt(index);
+ }
+#endif
+ loadList << reinterpret_cast<GeoSceneXmlDataSource*>(dataset)->filename();
}
}
}
Modified: marble/trunk/src/lib/MarblePhysics.cpp
===================================================================
--- marble/trunk/src/lib/MarblePhysics.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarblePhysics.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -16,8 +16,9 @@
using namespace Marble;
-MarblePhysics::MarblePhysics()
- : m_jumpDuration( 2000 )
+MarblePhysics::MarblePhysics( QObject * parent )
+ : QObject( parent ),
+ m_jumpDuration( 2000 )
{
m_timeLine = new QTimeLine( m_jumpDuration );
m_timeLine->setFrameRange( 0, 500 );
@@ -55,7 +56,7 @@
qreal x = (qreal)(m_jumpDuration ) * t;
- qreal y = a * x * x + b * x + g; // Parabolic function
+ qreal y = ( a * x + b ) * x + g; // Parabolic function
return GeoDataCoordinates( lon, lat, y );
}
Modified: marble/trunk/src/lib/MarblePhysics.h
===================================================================
--- marble/trunk/src/lib/MarblePhysics.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarblePhysics.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -24,7 +24,7 @@
Q_OBJECT
public:
- MarblePhysics();
+ MarblePhysics( QObject * parent );
~MarblePhysics();
void jumpTo( const GeoDataCoordinates &targetPoint );
Modified: marble/trunk/src/lib/MarbleRenderPlugin.h
===================================================================
--- marble/trunk/src/lib/MarbleRenderPlugin.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleRenderPlugin.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -69,7 +69,7 @@
};
#define MARBLE_PLUGIN(T) public:\
- virtual MarbleRenderPlugin* instance() { return new T(); };
+ virtual MarbleRenderPlugin* pluginInstance() { return new T(); };
}
#endif // MARBLE_RENDER_PLUGIN_H
Modified: marble/trunk/src/lib/MarbleRenderPluginInterface.h
===================================================================
--- marble/trunk/src/lib/MarbleRenderPluginInterface.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleRenderPluginInterface.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -40,7 +40,7 @@
/**
* @brief Returns a new object of the plugin
*/
- virtual MarbleRenderPlugin* instance() = 0;
+ virtual MarbleRenderPlugin* pluginInstance() = 0;
/**
* @brief Returns the name(s) of the backend that the plugin can render
Modified: marble/trunk/src/lib/MarbleRunnerManager.cpp
===================================================================
--- marble/trunk/src/lib/MarbleRunnerManager.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleRunnerManager.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -46,37 +46,24 @@
m_activeRunners = 0;
m_lastString = "";
- //Runners
- m_latlonRunner = new LatLonRunner(0);
- m_latlonRunner->start();
- m_latlonRunner->moveToThread(m_latlonRunner);
- connect( m_latlonRunner, SIGNAL( runnerStarted() ),
- this, SLOT( slotRunnerStarted() ));
- connect( m_latlonRunner, SIGNAL( runnerFinished( QVector<GeoDataPlacemark*> ) ),
- this, SLOT( slotRunnerFinished( QVector<GeoDataPlacemark*> ) ));
- connect( this, SIGNAL( engage(QString) ),
- m_latlonRunner, SLOT( parse(QString) ));
-
- m_onfRunner = new OnfRunner(0);
- m_onfRunner->start();
- m_onfRunner->moveToThread(m_onfRunner);
- connect( m_onfRunner, SIGNAL( runnerStarted() ),
- this, SLOT( slotRunnerStarted() ));
- connect( m_onfRunner, SIGNAL( runnerFinished( QVector<GeoDataPlacemark*> ) ),
- this, SLOT( slotRunnerFinished( QVector<GeoDataPlacemark*> ) ));
- connect( this, SIGNAL( engage(QString) ),
- m_onfRunner, SLOT( parse(QString) ));
}
MarbleRunnerManager::~MarbleRunnerManager()
{
- m_latlonRunner->quit();
- m_latlonRunner->wait();
- delete m_latlonRunner;
-
- m_onfRunner->quit();
- m_onfRunner->wait();
- delete m_onfRunner;
+ foreach(MarbleAbstractRunner* runner, m_runners)
+ {
+ runner->quit();
+ runner->wait();
+#if QT_VERSION >= 0x040400
+ m_runners.removeOne(runner);
+#else
+ int index = m_runners.indexOf(runner);
+ if (index != -1) {
+ m_runners.removeAt(index);
+ }
+#endif
+ delete runner;
+ }
}
void MarbleRunnerManager::newText(QString text)
@@ -89,30 +76,44 @@
delete m_model;
m_model = model;
}
-// qDebug() << "Engage: " << text;
- emit engage(text);
+
+ LatLonRunner* llrunner = new LatLonRunner;
+ m_runners << dynamic_cast<MarbleAbstractRunner*>(llrunner);
+ connect( llrunner, SIGNAL( runnerFinished( MarbleAbstractRunner*, QVector<GeoDataPlacemark*> ) ),
+ this, SLOT( slotRunnerFinished( MarbleAbstractRunner*, QVector<GeoDataPlacemark*> ) ));
+ llrunner->parse(text);
+
+ OnfRunner* onfrunner = new OnfRunner;
+ m_runners << dynamic_cast<MarbleAbstractRunner*>(onfrunner);
+ connect( onfrunner, SIGNAL( runnerFinished( MarbleAbstractRunner*, QVector<GeoDataPlacemark*> ) ),
+ this, SLOT( slotRunnerFinished( MarbleAbstractRunner*, QVector<GeoDataPlacemark*> ) ));
+ onfrunner->parse(text);
+
+ llrunner->start();
+ onfrunner->start();
}
-void MarbleRunnerManager::slotRunnerFinished( QVector<GeoDataPlacemark*> result )
+void MarbleRunnerManager::slotRunnerFinished( MarbleAbstractRunner* runner, QVector<GeoDataPlacemark*> result )
{
- m_activeRunners--;
- qDebug() << "Runner finished, active runners: " << m_activeRunners;
+#if QT_VERSION >= 0x040400
+ m_runners.removeOne(runner);
+#else
+ int index = m_runners.indexOf(runner);
+ if (index != -1) {
+ m_runners.removeAt(index);
+ }
+#endif
+ qDebug() << "Runner finished, active runners: " << m_runners.size();
qDebug() << "Runner reports" << result.size() << "results";
if( result.isEmpty() )
return;
PlaceMarkContainer cont( result, "Runner Results" );
m_model->addPlaceMarks( cont, false );
-// qDebug() << "emit modelchanged";
+
emit modelChanged( m_model );
}
-void MarbleRunnerManager::slotRunnerStarted()
-{
- m_activeRunners++;
- qDebug() << "Runner starting, active runners: " << m_activeRunners;
-}
-
MarblePlacemarkModel* MarbleRunnerManager::model()
{
return m_model;
Modified: marble/trunk/src/lib/MarbleRunnerManager.h
===================================================================
--- marble/trunk/src/lib/MarbleRunnerManager.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleRunnerManager.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -31,8 +31,7 @@
class MarblePlacemarkModel;
class GeoDataPlacemark;
-class LatLonRunner;
-class OnfRunner;
+class MarbleAbstractRunner;
class MarbleRunnerManager : public QObject
{
@@ -48,18 +47,16 @@
signals:
void allDone();
void modelChanged( MarblePlacemarkModel *model );
- //tells runners to make it so
- void engage(QString text);
+
private slots:
- void slotRunnerFinished(QVector<GeoDataPlacemark*> result);
- void slotRunnerStarted();
+ void slotRunnerFinished( MarbleAbstractRunner* runner, QVector<GeoDataPlacemark*> result);
+
private:
int m_activeRunners;
QString m_lastString;
MarblePlacemarkModel *m_model;
+ QList<MarbleAbstractRunner*> m_runners;
- LatLonRunner *m_latlonRunner;
- OnfRunner *m_onfRunner;
};
}
Modified: marble/trunk/src/lib/MarbleWidget.cpp
===================================================================
--- marble/trunk/src/lib/MarbleWidget.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleWidget.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -5,8 +5,8 @@
// find a copy of this license in LICENSE.txt in the top directory of
// the source code.
//
-// Copyright 2006-2007 Torsten Rahn <tackat@xxxxxxx>"
-// Copyright 2007 Inge Wallin <ingwa@xxxxxxx>"
+// Copyright 2006-2007 Torsten Rahn <tackat@xxxxxxx>
+// Copyright 2007 Inge Wallin <ingwa@xxxxxxx>
//
#include "MarbleWidget.h"
@@ -24,7 +24,9 @@
#include <QtGui/QStyleOptionGraphicsItem>
#include <QtNetwork/QNetworkProxy>
-//#include <QtDBus/QDBusConnection>
+#ifdef MARBLE_DBUS
+#include <QtDBus/QDBusConnection>
+#endif
#include "AbstractProjection.h"
#include "MarbleDirs.h"
@@ -39,7 +41,6 @@
#include "MarblePhysics.h"
#include "MarblePlacemarkModel.h"
#include "MarbleWidgetInputHandler.h"
-#include "MarbleWidgetPopupMenu.h"
#include "TileCreatorDialog.h"
#include "HttpDownloadManager.h"
#include "gps/GpsLayer.h"
@@ -49,8 +50,6 @@
#include "AbstractProjectionHelper.h"
#include "ViewportParams.h"
-#include "MeasureTool.h"
-
#include "MarbleMap_p.h"
namespace Marble
@@ -68,12 +67,12 @@
public:
MarbleWidgetPrivate( MarbleMap *map, MarbleWidget *parent )
: m_widget( parent ),
- m_map( map ),
+ m_map( map ),
m_viewContext( Marble::Still ),
m_stillQuality( Marble::High ), m_animationQuality( Marble::Low ),
m_animationsEnabled( false ),
m_inputhandler( 0 ),
- m_physics( new MarblePhysics() ),
+ m_physics( new MarblePhysics( parent ) ),
m_proxyHost(),
m_proxyPort( 0 )
{
@@ -82,7 +81,6 @@
~MarbleWidgetPrivate()
{
- delete m_physics;
delete m_map;
}
@@ -105,14 +103,11 @@
int m_logZoom;
MarbleWidgetInputHandler *m_inputhandler;
- MarbleWidgetPopupMenu *m_popupmenu;
MarblePhysics *m_physics;
QString m_proxyHost;
qint16 m_proxyPort;
-
- void _q_initGui();
};
@@ -121,12 +116,15 @@
: QWidget( parent ),
d( new MarbleWidgetPrivate( new MarbleMap(), this ) )
{
-// QDBusConnection::sessionBus().registerObject("/marble", this, QDBusConnection::QDBusConnection::ExportAllSlots);
+#ifdef MARBLE_DBUS
+ QDBusConnection::sessionBus().registerObject("/MarbleWidget", this,
+ QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals );
+#endif
d->construct();
- // Delayed model initialization
- QTimer::singleShot( 0, this, SLOT( _q_initGui() ) );
+ setInputHandler( new MarbleWidgetDefaultInputHandler );
+ setMouseTracking( true );
}
@@ -138,8 +136,8 @@
d->construct();
- // Delayed model initialization
- QTimer::singleShot( 0, this, SLOT( _q_initGui() ) );
+ setInputHandler( new MarbleWidgetDefaultInputHandler );
+ setMouseTracking( true );
}
MarbleWidget::~MarbleWidget()
@@ -160,7 +158,7 @@
// Initialize the map and forward some signals.
m_map->setSize( m_widget->width(), m_widget->height() );
- m_map->viewParams()->setMapQuality( m_stillQuality );
+ m_map->viewParams()->setMapQuality( m_stillQuality );
m_widget->connect( m_map, SIGNAL( projectionChanged( Projection ) ),
m_widget, SIGNAL( projectionChanged( Projection ) ) );
@@ -179,10 +177,9 @@
// Some part of the screen contents changed.
- m_widget->connect( m_model, SIGNAL( regionChanged( BoundingBox& ) ) ,
+ m_widget->connect( m_model, SIGNAL( regionChanged( BoundingBox& ) ),
m_widget, SLOT( updateRegion( BoundingBox& ) ) );
-
// Set background: black.
m_widget->setPalette( QPalette ( Qt::black ) );
@@ -195,8 +192,10 @@
m_widget, SLOT( updateGps() ) );
// Show a progress dialog when the model calculates new map tiles.
- m_widget->connect( m_model, SIGNAL( creatingTilesStart( TileCreator*, const QString&, const QString& ) ),
- m_widget, SLOT( creatingTilesStart( TileCreator*, const QString&, const QString& ) ) );
+ m_widget->connect( m_model, SIGNAL( creatingTilesStart( TileCreator*, const QString&,
+ const QString& ) ),
+ m_widget, SLOT( creatingTilesStart( TileCreator*, const QString&,
+ const QString& ) ) );
m_logZoom = 0;
@@ -204,27 +203,13 @@
m_widget, SLOT( enableInput() ) );
m_widget->connect( m_model->sunLocator(), SIGNAL( updateStars() ),
- m_widget, SLOT( update() ) );
+ m_widget, SLOT( update() ) );
m_widget->connect( m_physics, SIGNAL( valueChanged( qreal ) ),
- m_widget, SLOT( updateAnimation( qreal ) ) );
-}
+ m_widget, SLOT( updateAnimation( qreal ) ) );
-void MarbleWidgetPrivate::_q_initGui() {
- m_popupmenu = new MarbleWidgetPopupMenu( m_widget, m_model );
-
- // Handle mouse and keyboard input.
- m_inputhandler = 0;
- m_widget->setInputHandler( new MarbleWidgetDefaultInputHandler );
- m_widget->setMouseTracking( true );
-
- // The interface to the measure tool consists of a RMB popup menu
- // and some signals.
- MeasureTool *measureTool = m_map->measureTool();
- m_widget->connect( m_popupmenu, SIGNAL( addMeasurePoint( qreal, qreal ) ),
- measureTool, SLOT( addMeasurePoint( qreal, qreal ) ) );
- m_widget->connect( m_popupmenu, SIGNAL( removeMeasurePoints() ),
- measureTool, SLOT( removeMeasurePoints( ) ) );
+ m_widget->connect( m_model->sunLocator(), SIGNAL( centerSun() ),
+ m_widget, SLOT( centerSun() ) );
}
// ----------------------------------------------------------------
@@ -243,18 +228,13 @@
void MarbleWidget::setInputHandler(MarbleWidgetInputHandler *handler)
{
- if ( d->m_inputhandler )
- delete d->m_inputhandler;
-
+ delete d->m_inputhandler;
d->m_inputhandler = handler;
if ( d->m_inputhandler ) {
d->m_inputhandler->init( this );
installEventFilter( d->m_inputhandler );
- connect( d->m_inputhandler, SIGNAL( lmbRequest( int, int ) ),
- d->m_popupmenu, SLOT( showLmbMenu( int, int ) ) );
- connect( d->m_inputhandler, SIGNAL( rmbRequest( int, int ) ),
- d->m_popupmenu, SLOT( showRmbMenu( int, int ) ) );
+
connect( d->m_inputhandler, SIGNAL( mouseClickScreenPosition( int, int) ),
this, SLOT( notifyMouseClick( int, int ) ) );
@@ -287,7 +267,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
emit distanceChanged( distanceString() );
@@ -481,7 +462,8 @@
// We only have to repaint the background every time if the globe
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
emit distanceChanged( distanceString() );
@@ -511,7 +493,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
}
@@ -522,7 +505,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
}
@@ -530,64 +514,63 @@
void MarbleWidget::centerOn( const qreal& lon, const qreal& lat, bool animated )
{
- if ( d->m_animationsEnabled && animated )
- {
- d->m_physics->setCurrentPosition( GeoDataCoordinates( centerLongitude(), centerLatitude(), distance(), GeoDataCoordinates::Degree ) );
- d->m_physics->jumpTo( GeoDataCoordinates( lon, lat, distance(), GeoDataCoordinates::Degree ) );
- }
- else
- {
+ if ( d->m_animationsEnabled && animated ) {
+ d->m_physics->setCurrentPosition( GeoDataCoordinates( centerLongitude(), centerLatitude(),
+ distance(),
+ GeoDataCoordinates::Degree ) );
+ d->m_physics->jumpTo( GeoDataCoordinates( lon, lat, distance(),
+ GeoDataCoordinates::Degree ) );
+ } else {
d->m_map->centerOn( lon, lat );
}
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
}
void MarbleWidget::centerOn( const QModelIndex& index, bool animated )
{
- if ( d->m_animationsEnabled && animated )
- {
+ if ( d->m_animationsEnabled && animated ) {
QItemSelectionModel *selectionModel = d->m_map->model()->placeMarkSelectionModel();
Q_ASSERT( selectionModel );
selectionModel->clear();
if ( index.isValid() ) {
- const GeoDataCoordinates targetPosition = index.data( MarblePlacemarkModel::CoordinateRole ).value<GeoDataCoordinates>();
+ const GeoDataCoordinates targetPosition =
+ index.data( MarblePlacemarkModel::CoordinateRole ).value<GeoDataCoordinates>();
- d->m_physics->setCurrentPosition( GeoDataCoordinates( centerLongitude(), centerLatitude(), distance(), GeoDataCoordinates::Degree ) );
+ d->m_physics->setCurrentPosition( GeoDataCoordinates( centerLongitude(),
+ centerLatitude(), distance(),
+ GeoDataCoordinates::Degree ) );
d->m_physics->jumpTo( targetPosition );
selectionModel->select( index, QItemSelectionModel::SelectCurrent );
}
- }
- else
- {
+ } else {
d->m_map->centerOn( index );
}
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
}
void MarbleWidget::centerOn( const GeoDataCoordinates &position, bool animated )
{
- if ( d->m_animationsEnabled && animated )
- {
+ if ( d->m_animationsEnabled && animated ) {
GeoDataCoordinates targetPosition = position;
targetPosition.setAltitude( distance() );
d->m_physics->jumpTo( targetPosition );
- }
- else
- {
+ } else {
qreal lon, lat;
position.geoCoordinates( lon, lat, GeoDataCoordinates::Degree );
d->m_map->setDistance( position.altitude() );
@@ -596,7 +579,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
}
@@ -605,8 +589,7 @@
{
GeoDataCoordinates position = d->m_physics->suggestedPosition();
- if ( updateValue < 1.0 )
- {
+ if ( updateValue < 1.0 ) {
setViewContext( Marble::Animation );
centerOn( position );
setViewContext( Marble::Still );
@@ -622,7 +605,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
}
void MarbleWidget::setCenterLongitude( qreal lon )
@@ -631,7 +615,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
}
Projection MarbleWidget::projection() const
@@ -643,7 +628,8 @@
{
d->m_map->setProjection( projection );
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
}
@@ -675,7 +661,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
}
@@ -686,7 +673,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
}
@@ -698,7 +686,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
}
@@ -709,7 +698,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
}
@@ -724,7 +714,8 @@
setUpdatesEnabled( false );
d->m_map->setSize( width(), height() );
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint();
setUpdatesEnabled( true );
@@ -803,12 +794,12 @@
const QRegion MarbleWidget::activeRegion()
{
- return d->m_map->viewParams()->currentProjection()->helper()->activeRegion();;
+ return d->m_map->viewParams()->currentProjection()->helper()->activeRegion();
}
const QRegion MarbleWidget::projectedRegion()
{
- return d->m_map->viewParams()->currentProjection()->helper()->projectedRegion();;
+ return d->m_map->viewParams()->currentProjection()->helper()->projectedRegion();
}
void MarbleWidget::paintEvent(QPaintEvent *evt)
@@ -831,11 +822,11 @@
// Draws the map like MarbleMap::paint does, but adds our customPaint in between
d->m_map->d->paintGround( painter, dirtyRect );
d->m_map->customPaint( &painter );
- customPaint(&painter);
+ customPaint( &painter );
d->m_map->d->paintOverlay( painter, dirtyRect );
qreal fps = 1000.0 / (qreal)( t.elapsed() );
- d->m_map->d->paintFps(painter, dirtyRect, fps);
+ d->m_map->d->paintFps( painter, dirtyRect, fps );
emit d->m_map->framesPerSecond( fps );
}
@@ -852,7 +843,8 @@
// We only have to repaint the background every time if the earth
// doesn't cover the whole image.
- setAttribute(Qt::WA_NoSystemBackground, d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
+ setAttribute( Qt::WA_NoSystemBackground,
+ d->m_map->mapCoversViewport() && !mapThemeId().isEmpty() );
repaint(); // not obsolete in case the zoomlevel stays unaltered
}
@@ -1031,11 +1023,10 @@
void MarbleWidget::notifyMouseClick( int x, int y)
{
- bool valid = false;
qreal lon = 0;
qreal lat = 0;
- valid = geoCoordinates( x, y, lon, lat, GeoDataCoordinates::Radian );
+ bool const valid = geoCoordinates( x, y, lon, lat, GeoDataCoordinates::Radian );
if ( valid ) {
emit mouseClickGeoPosition( lon, lat, GeoDataCoordinates::Radian);
@@ -1045,11 +1036,10 @@
void MarbleWidget::updateGps()
{
QRegion temp;
- bool draw;
- draw = d->m_model->gpsLayer()->updateGps( size(),
- d->m_map->viewParams(),
- temp );
- if ( draw ){
+ const bool draw = d->m_model->gpsLayer()->updateGps( size(),
+ d->m_map->viewParams(),
+ temp );
+ if ( draw ) {
update( temp );
}
/*
@@ -1122,7 +1112,7 @@
{
Q_UNUSED(box);
- //really not sure if this is nessary as its designed for
+ //really not sure if this is nessary as it is designed for
//placemark based layers
setNeedsUpdate();
@@ -1227,10 +1217,10 @@
// NOTE: coordinates as lon1, lat1, lon2, lat2 (or West, North, East, South)
// as left/top, right/bottom rectangle.
QList<double> coordinates;
- coordinates << box.west(GeoDataPoint::Degree) << box.north(GeoDataPoint::Degree)
+ coordinates << box.west(GeoDataPoint::Degree) << box.north(GeoDataPoint::Degree)
<< box.east(GeoDataPoint::Degree) << box.south(GeoDataPoint::Degree);
- qDebug() << "West: " << coordinates[0] << " North: " << coordinates[1]
+ qDebug() << "West: " << coordinates[0] << " North: " << coordinates[1]
<< " East: " << coordinates[2] << " South: " << coordinates[3] << endl;
emit regionSelected(coordinates);
@@ -1270,7 +1260,6 @@
qreal lat = sunLocator->getLat();
centerOn( lon, lat );
- qDebug() << "centering on Sun at" << lat << lon;
disableInput();
}
@@ -1281,14 +1270,18 @@
void MarbleWidget::enableInput()
{
- if ( !d->m_inputhandler )
+ if ( !d->m_inputhandler ) {
setInputHandler( new MarbleWidgetDefaultInputHandler );
+ }
+ else {
+ installEventFilter( d->m_inputhandler );
+ }
}
void MarbleWidget::disableInput()
{
qDebug() << "MarbleWidget::disableInput";
- setInputHandler( 0 );
+ removeEventFilter( d->m_inputhandler );
setCursor( Qt::ArrowCursor );
}
Modified: marble/trunk/src/lib/MarbleWidget.h
===================================================================
--- marble/trunk/src/lib/MarbleWidget.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleWidget.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -28,8 +28,6 @@
#include <QtGui/QPixmap>
#include <QtDesigner/QDesignerExportWidget>
-//#include <QtDBus/QtDBus>
-
#include "marble_export.h"
#include "GeoDataCoordinates.h" // In geodata/data/
#include "MarbleWidgetInputHandler.h"
@@ -115,7 +113,9 @@
class MARBLE_EXPORT MarbleWidget : public QWidget
{
Q_OBJECT
- Q_CLASSINFO("D-Bus Interface", "org.kde.marble")
+#ifdef MARBLE_DBUS
+ Q_CLASSINFO("D-Bus Interface", "org.kde.MarbleWidget")
+#endif
Q_PROPERTY(int zoom READ zoom WRITE zoomView)
@@ -299,9 +299,8 @@
* @return @c true if the pixel (x, y) is within the globe
* @c false if the pixel (x, y) is outside the globe, i.e. in space
*/
+ // FIXME: refactor the GPS/GPX code, so that this nonsense method can die.
bool globalQuaternion( int x, int y, Quaternion &q);
- // FIXME: Make the names of globalQuaternion() and
- // geoCoordinates() follow a pattern.
/**
* @brief Return the longitude of the center point.
@@ -980,8 +979,6 @@
private:
Q_DISABLE_COPY( MarbleWidget )
MarbleWidgetPrivate * const d;
-
- Q_PRIVATE_SLOT( d, void _q_initGui() )
};
}
Modified: marble/trunk/src/lib/MarbleWidgetInputHandler.cpp
===================================================================
--- marble/trunk/src/lib/MarbleWidgetInputHandler.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleWidgetInputHandler.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -27,6 +27,8 @@
#include "ViewParams.h"
#include "ViewportParams.h"
#include "MarbleAbstractFloatItem.h"
+#include "MeasureTool.h"
+#include "MarbleWidgetPopupMenu.h"
using namespace Marble;
@@ -58,7 +60,7 @@
MarbleWidgetDefaultInputHandler::MarbleWidgetDefaultInputHandler()
- : MarbleWidgetInputHandler()
+ : MarbleWidgetInputHandler(), m_popupmenu( 0 ), m_leftpopup(true)
{
curpmtl.load( ":/bitmaps/cursor_tl.xpm" );
curpmtc.load( ":/bitmaps/cursor_tc.xpm" );
@@ -85,7 +87,7 @@
m_selectionRubber = new QRubberBand(QRubberBand::Rectangle, m_widget);
m_selectionRubber->hide();
- m_dragThreshold = 3;
+ m_dragThreshold = 3;
}
void MarbleWidgetInputHandler::restoreViewContext()
@@ -102,6 +104,46 @@
}
}
+void MarbleWidgetDefaultInputHandler::init(MarbleWidget *w)
+{
+ MarbleWidgetInputHandler::init(w);
+
+ // The interface to the measure tool consists of a RMB popup menu
+ // and some signals.
+ MeasureTool *measureTool = m_widget->map()->measureTool();
+
+ // Connect the inputHandler and the measure tool to the popup menu
+ if ( !m_popupmenu ) {
+ m_popupmenu = new MarbleWidgetPopupMenu( m_widget, m_model );
+ }
+ connect( this, SIGNAL( rmbRequest( int, int ) ),
+ m_popupmenu, SLOT( showRmbMenu( int, int ) ) );
+ connect( m_popupmenu, SIGNAL( addMeasurePoint( qreal, qreal ) ),
+ measureTool, SLOT( addMeasurePoint( qreal, qreal ) ) );
+ connect( m_popupmenu, SIGNAL( removeMeasurePoints() ),
+ measureTool, SLOT( removeMeasurePoints( ) ) );
+ connect( this, SIGNAL( lmbRequest( int, int ) ),
+ this, SLOT( showLmbMenu( int, int ) ) );
+}
+
+void MarbleWidgetDefaultInputHandler::showLmbMenu( int x, int y)
+{
+ if (m_leftpopup)
+ {
+ m_popupmenu->showLmbMenu(x,y);
+ }
+}
+
+void MarbleWidgetDefaultInputHandler::setLeftMouseButtonPopup(bool enabled)
+{
+ m_leftpopup = enabled;
+}
+
+bool MarbleWidgetDefaultInputHandler::leftMouseButtonPopup()
+{
+ return m_leftpopup;
+}
+
bool MarbleWidgetDefaultInputHandler::eventFilter( QObject* o, QEvent* e )
{
Q_UNUSED( o );
Modified: marble/trunk/src/lib/MarbleWidgetInputHandler.h
===================================================================
--- marble/trunk/src/lib/MarbleWidgetInputHandler.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/MarbleWidgetInputHandler.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -37,6 +37,7 @@
class MarbleModel;
class MarbleWidget;
class MarbleMap;
+class MarbleWidgetPopupMenu;
class MARBLE_EXPORT MarbleWidgetInputHandler : public QObject
{
@@ -49,7 +50,7 @@
void setPositionSignalConnected( bool connected ){ m_positionSignalConnected = connected; }
bool isPositionSignalConnected() const { return m_positionSignalConnected; }
- void init(MarbleWidget*);
+ virtual void init(MarbleWidget*);
Q_SIGNALS:
// Mouse button menus
@@ -77,14 +78,33 @@
class MarbleWidgetDefaultInputHandler : public MarbleWidgetInputHandler
{
+ Q_OBJECT
+
public:
MarbleWidgetDefaultInputHandler();
static bool keyEvent( MarbleMap * map, QEvent* e );
+
+ virtual void init(MarbleWidget*);
+
+ /**
+ * @brief Set whether a popup menu appears on a click (not drag) with the left mouse button
+ * @param enabled True to enable the popup menu (default), false to disable it
+ */
+ void setLeftMouseButtonPopup(bool enabled);
+
+ /**
+ * @brief Return whether the left mouse button popup menu is active
+ * @return True iff a popup menu is shown on left mouse button clicks
+ */
+ bool leftMouseButtonPopup();
protected:
bool eventFilter( QObject *, QEvent * );
+ private Q_SLOTS:
+ void showLmbMenu( int, int );
+
private:
QPixmap curpmtl;
QPixmap curpmtc;
@@ -113,6 +133,10 @@
QPoint m_selectionOrigin;
QRubberBand *m_selectionRubber;
+
+ MarbleWidgetPopupMenu *m_popupmenu;
+
+ bool m_leftpopup;
};
}
Modified: marble/trunk/src/lib/PlaceMarkInfoDialog.ui
===================================================================
--- marble/trunk/src/lib/PlaceMarkInfoDialog.ui 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/PlaceMarkInfoDialog.ui 2009-02-24 20:37:32 UTC (rev 3589)
@@ -5,7 +5,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>513</width>
+ <width>800</width>
<height>565</height>
</rect>
</property>
Modified: marble/trunk/src/lib/PlaceMarkManager.cpp
===================================================================
--- marble/trunk/src/lib/PlaceMarkManager.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/PlaceMarkManager.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -45,6 +45,12 @@
PlaceMarkManager::~PlaceMarkManager()
{
+ foreach( PlaceMarkLoader *loader, m_loaderList ) {
+ if ( loader ) {
+ loader->wait();
+ }
+ }
+
delete m_model;
/* do not delete the m_geomodel here
* it is not this models property
Modified: marble/trunk/src/lib/PlanetaryConstants.h
===================================================================
--- marble/trunk/src/lib/PlanetaryConstants.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/PlanetaryConstants.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -17,79 +17,94 @@
#ifndef PLANETARYCONSTANTS_H
#define PLANETARYCONSTANTS_H
-#define pc_deg2rad(x) x*M_PI/180.0
+#include "global.h"
-struct PlanetaryConstants {
- qreal M_0, M_1; // for calculating mean anomaly
- qreal C_1, C_2, C_3, C_4, C_5, C_6; // for calculating equation of center
- qreal Pi; // ecliptic longitude of the perihelion
- qreal epsilon; // obliquity of the ecliptic plane
- qreal theta_0, theta_1; // for calculating sidereal time
+namespace Marble {
+
+struct PlanetaryConstants
+{
+ qreal M_0, M_1; // for calculating mean anomaly
+ qreal C_1, C_2, C_3, C_4, C_5, C_6; // for calculating equation of center
+ qreal Pi; // ecliptic longitude of the perihelion
+ qreal epsilon; // obliquity of the ecliptic plane
+ qreal theta_0, theta_1; // for calculating sidereal time
};
-// constants taken from http://www.astro.uu.nl/~strous/AA/en/reken/zonpositie.html
+// constants taken from
+// http://www.astro.uu.nl/~strous/AA/en/reken/zonpositie.html
PlanetaryConstants PC_MERCURY = {
- pc_deg2rad(174.7948), pc_deg2rad(4.09233445),
- pc_deg2rad(23.4400), pc_deg2rad(2.9818), pc_deg2rad(0.5255), pc_deg2rad(0.1058), pc_deg2rad(0.0241), pc_deg2rad(0.0055),
- pc_deg2rad(111.5943),
- pc_deg2rad(0.02),
- pc_deg2rad(13.5964), pc_deg2rad(6.1385025)
+ (174.7948*DEG2RAD), (4.09233445*DEG2RAD),
+ (23.4400*DEG2RAD), (2.9818*DEG2RAD), (0.5255*DEG2RAD), (0.1058*DEG2RAD),
+ (0.0241*DEG2RAD), (0.0055*DEG2RAD),
+ (111.5943*DEG2RAD),
+ (0.02*DEG2RAD),
+ (13.5964*DEG2RAD), (6.1385025*DEG2RAD)
};
PlanetaryConstants PC_VENUS = {
- pc_deg2rad(50.4161), pc_deg2rad(1.60213034),
- pc_deg2rad(0.7758), pc_deg2rad(0.0033), pc_deg2rad(0.0000), pc_deg2rad(0.0000), pc_deg2rad(0.0000), pc_deg2rad(0.0000),
- pc_deg2rad(73.9519),
- pc_deg2rad(2.64),
- pc_deg2rad(215.2995), pc_deg2rad(-1.4813688)
+ (50.4161*DEG2RAD), (1.60213034*DEG2RAD),
+ (0.7758*DEG2RAD), (0.0033*DEG2RAD), (0.0000*DEG2RAD), (0.0000*DEG2RAD),
+ (0.0000*DEG2RAD), (0.0000*DEG2RAD),
+ (73.9519*DEG2RAD),
+ (2.64*DEG2RAD),
+ (215.2995*DEG2RAD), (-1.4813688*DEG2RAD)
};
PlanetaryConstants PC_EARTH = {
- pc_deg2rad(357.5291), pc_deg2rad(0.98560028),
- pc_deg2rad(1.9148), pc_deg2rad(0.0200), pc_deg2rad(0.0003), pc_deg2rad(0.0000), pc_deg2rad(0.0000), pc_deg2rad(0.0000),
- pc_deg2rad(102.9372),
- pc_deg2rad(23.45),
- pc_deg2rad(280.1600), pc_deg2rad(360.9856235),
+ (357.5291*DEG2RAD), (0.98560028*DEG2RAD),
+ (1.9148*DEG2RAD), (0.0200*DEG2RAD), (0.0003*DEG2RAD), (0.0000*DEG2RAD),
+ (0.0000*DEG2RAD), (0.0000*DEG2RAD),
+ (102.9372*DEG2RAD),
+ (23.45*DEG2RAD),
+ (280.1600*DEG2RAD), (360.9856235*DEG2RAD),
};
PlanetaryConstants PC_MARS = {
- pc_deg2rad(19.3730), pc_deg2rad(0.52402068),
- pc_deg2rad(10.6912), pc_deg2rad(0.6228), pc_deg2rad(0.0503), pc_deg2rad(0.0046), pc_deg2rad(0.0005), pc_deg2rad(0.0000),
- pc_deg2rad(70.9812),
- pc_deg2rad(25.19),
- pc_deg2rad(313.4803), pc_deg2rad(350.89198226)
+ (19.3730*DEG2RAD), (0.52402068*DEG2RAD),
+ (10.6912*DEG2RAD), (0.6228*DEG2RAD), (0.0503*DEG2RAD), (0.0046*DEG2RAD),
+ (0.0005*DEG2RAD), (0.0000*DEG2RAD),
+ (70.9812*DEG2RAD),
+ (25.19*DEG2RAD),
+ (313.4803*DEG2RAD), (350.89198226*DEG2RAD)
};
PlanetaryConstants PC_JUPITER = {
- pc_deg2rad(20.0202), pc_deg2rad(0.08308529),
- pc_deg2rad(5.5549), pc_deg2rad(0.1683), pc_deg2rad(0.0071), pc_deg2rad(0.0003), pc_deg2rad(0.0000), pc_deg2rad(0.0000),
- pc_deg2rad(237.2074),
- pc_deg2rad(3.12),
- pc_deg2rad(146.0727), pc_deg2rad(870.5366420)
+ (20.0202*DEG2RAD), (0.08308529*DEG2RAD),
+ (5.5549*DEG2RAD), (0.1683*DEG2RAD), (0.0071*DEG2RAD), (0.0003*DEG2RAD),
+ (0.0000*DEG2RAD), (0.0000*DEG2RAD),
+ (237.2074*DEG2RAD),
+ (3.12*DEG2RAD),
+ (146.0727*DEG2RAD), (870.5366420*DEG2RAD)
};
PlanetaryConstants PC_SATURN = {
- pc_deg2rad(317.0207), pc_deg2rad(0.03344414),
- pc_deg2rad(6.3585), pc_deg2rad(0.2204), pc_deg2rad(0.0106), pc_deg2rad(0.0006), pc_deg2rad(0.0000), pc_deg2rad(0.0000),
- pc_deg2rad(99.4571),
- pc_deg2rad(26.74),
- pc_deg2rad(174.3479), pc_deg2rad(810.7939024)
+ (317.0207*DEG2RAD), (0.03344414*DEG2RAD),
+ (6.3585*DEG2RAD), (0.2204*DEG2RAD), (0.0106*DEG2RAD), (0.0006*DEG2RAD),
+ (0.0000*DEG2RAD), (0.0000*DEG2RAD),
+ (99.4571*DEG2RAD),
+ (26.74*DEG2RAD),
+ (174.3479*DEG2RAD), (810.7939024*DEG2RAD)
};
PlanetaryConstants PC_URANUS = {
- pc_deg2rad(141.0498), pc_deg2rad(0.01172834),
- pc_deg2rad(5.3042), pc_deg2rad(0.1534), pc_deg2rad(0.0062), pc_deg2rad(0.0003), pc_deg2rad(0.0000), pc_deg2rad(0.0000),
- pc_deg2rad(5.4639),
- pc_deg2rad(82.22),
- pc_deg2rad(17.9705), pc_deg2rad(-501.1600928)
+ (141.0498*DEG2RAD), (0.01172834*DEG2RAD),
+ (5.3042*DEG2RAD), (0.1534*DEG2RAD), (0.0062*DEG2RAD), (0.0003*DEG2RAD),
+ (0.0000*DEG2RAD), (0.0000*DEG2RAD),
+ (5.4639*DEG2RAD),
+ (82.22*DEG2RAD),
+ (17.9705*DEG2RAD), (-501.1600928*DEG2RAD)
};
PlanetaryConstants PC_NEPTUNE = {
- pc_deg2rad(256.2250), pc_deg2rad(0.00598103),
- pc_deg2rad(1.0302), pc_deg2rad(0.0058), pc_deg2rad(0.0000), pc_deg2rad(0.0000), pc_deg2rad(0.0000), pc_deg2rad(0.0000),
- pc_deg2rad(182.1957),
- pc_deg2rad(27.84),
- pc_deg2rad(52.3996), pc_deg2rad(536.3128492)
+ (256.2250*DEG2RAD), (0.00598103*DEG2RAD),
+ (1.0302*DEG2RAD), (0.0058*DEG2RAD), (0.0000*DEG2RAD), (0.0000*DEG2RAD),
+ (0.0000*DEG2RAD), (0.0000*DEG2RAD),
+ (182.1957*DEG2RAD),
+ (27.84*DEG2RAD),
+ (52.3996*DEG2RAD), (536.3128492*DEG2RAD)
};
PlanetaryConstants PC_PLUTO = {
- pc_deg2rad(14.882), pc_deg2rad(0.00396),
- pc_deg2rad(28.3150), pc_deg2rad(4.3408), pc_deg2rad(0.9214), pc_deg2rad(0.2235), pc_deg2rad(0.0627), pc_deg2rad(0.0174),
- pc_deg2rad(4.5433),
- pc_deg2rad(57.46),
- pc_deg2rad(56.3183), pc_deg2rad(-56.3623195)
+ (14.882*DEG2RAD), (0.00396*DEG2RAD),
+ (28.3150*DEG2RAD), (4.3408*DEG2RAD), (0.9214*DEG2RAD), (0.2235*DEG2RAD),
+ (0.0627*DEG2RAD), (0.0174*DEG2RAD),
+ (4.5433*DEG2RAD),
+ (57.46*DEG2RAD),
+ (56.3183*DEG2RAD), (-56.3623195*DEG2RAD)
};
+}
+
#endif
Modified: marble/trunk/src/lib/PluginManager.cpp
===================================================================
--- marble/trunk/src/lib/PluginManager.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/PluginManager.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -96,7 +96,7 @@
MarbleRenderPlugin * layerPlugin;
if ( obj ) {
- layerPlugin = qobject_cast<MarbleRenderPlugin *>(obj);
+ layerPlugin = qobject_cast<MarbleRenderPlugin *>(obj)->pluginInstance();
}
if( obj && layerPlugin ) {
Modified: marble/trunk/src/lib/Projections/SphericalProjection.cpp
===================================================================
--- marble/trunk/src/lib/Projections/SphericalProjection.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/Projections/SphericalProjection.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -23,21 +23,17 @@
static SphericalProjectionHelper theHelper;
+// Since SphericalProjection does not have members yet, the
+// private class for the members is empty.
+// For ABI reasons it is there however, but we do not yet need to
+// construct/destruct an object of this class
class SphericalProjectionPrivate
{
- public:
- SphericalProjectionPrivate()
- {
- }
-
- ~SphericalProjectionPrivate()
- {
- }
};
SphericalProjection::SphericalProjection()
: AbstractProjection(),
- d( new SphericalProjectionPrivate() )
+ d( 0 )
{
m_maxLat = 90.0 * DEG2RAD;
m_minLat = -90.0 * DEG2RAD;
@@ -47,16 +43,13 @@
SphericalProjection::~SphericalProjection()
{
- delete d;
}
-
AbstractProjectionHelper *SphericalProjection::helper()
{
return &theHelper;
}
-
bool SphericalProjection::screenCoordinates( const qreal lon, const qreal lat,
const ViewportParams *viewport,
int& x, int& y )
Modified: marble/trunk/src/lib/Projections/SphericalProjection.h
===================================================================
--- marble/trunk/src/lib/Projections/SphericalProjection.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/Projections/SphericalProjection.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -54,13 +54,13 @@
* @return @c true if the geographical coordinates are visible on the screen
* @c false if the geographical coordinates are not visible on the screen
*/
- inline bool screenCoordinates( const qreal lon, const qreal lat,
+ bool screenCoordinates( const qreal lon, const qreal lat,
const ViewportParams *params,
int& x, int& y );
- inline bool screenCoordinates( const GeoDataCoordinates &coordinates,
- const ViewportParams *params,
- int &x, int &y, bool &globeHidesPoint );
+ bool screenCoordinates( const GeoDataCoordinates &coordinates,
+ const ViewportParams *params,
+ int &x, int &y, bool &globeHidesPoint );
bool screenCoordinates( const GeoDataCoordinates &coordinates,
const ViewportParams * viewport,
@@ -80,10 +80,10 @@
* @return @c true if the pixel (x, y) is within the globe
* @c false if the pixel (x, y) is outside the globe, i.e. in space.
*/
- inline bool geoCoordinates( int x, int y,
- const ViewportParams *params,
- qreal& lon, qreal& lat,
- GeoDataCoordinates::Unit unit = GeoDataCoordinates::Degree );
+ bool geoCoordinates( int x, int y,
+ const ViewportParams *params,
+ qreal& lon, qreal& lat,
+ GeoDataCoordinates::Unit unit = GeoDataCoordinates::Degree );
/**
* @brief Get a quaternion representing a point on the earth corresponding to a pixel in the map.
@@ -93,9 +93,9 @@
* @return @c true if the pixel (x, y) is within the globe
* @c false if the pixel (x, y) is outside the globe, i.e. in space
*/
- inline bool geoCoordinates( int x, int y,
- const ViewportParams *params,
- Quaternion &q );
+ bool geoCoordinates( int x, int y,
+ const ViewportParams *params,
+ Quaternion &q );
GeoDataLatLonAltBox latLonAltBox( const QRect& screenRect,
const ViewportParams *viewport );
Modified: marble/trunk/src/lib/SunControlWidget.cpp
===================================================================
--- marble/trunk/src/lib/SunControlWidget.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/SunControlWidget.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -9,9 +9,14 @@
// Copyright 2008 Inge Wallin <inge@xxxxxxxxxxxxxx>
//
-
+// Own
#include "SunControlWidget.h"
+// Qt
+#include <QShowEvent>
+
+#include "ExtDateTime.h"
+
using namespace Marble;
SunControlWidget::SunControlWidget(QWidget* parent, SunLocator* sunLocator)
@@ -34,10 +39,10 @@
this, SLOT( timeChanged( const QTime& ) ) );
connect( m_uiWidget.timeSlider, SIGNAL( sliderMoved( int ) ),
this, SLOT( hourChanged( int ) ) );
- connect(m_uiWidget.speedSlider, SIGNAL(sliderMoved(int)), this, SLOT(speedChanged(int)));
-
+ connect(m_uiWidget.speedSlider, SIGNAL(sliderMoved(int)), this, SLOT(speedChanged(int)));
+
setModal( false );
-
+
updateDateTime();
connect( m_sunLocator->datetime(), SIGNAL( timeChanged() ),
this, SLOT( updateDateTime() ) );
@@ -75,6 +80,7 @@
m_sunLocator->setCitylights( false );
else if ( index == 1 )
m_sunLocator->setCitylights( true );
+ m_sunLocator->update();
}
void SunControlWidget::centerSunClicked(bool checked)
@@ -148,4 +154,19 @@
m_uiWidget.speedLabel->setText( QString( "%1x" ).arg( speed ) );
}
+void SunControlWidget::showEvent(QShowEvent* event)
+{
+ if( !event->spontaneous() ) {
+ // Loading all options
+ m_uiWidget.speedSlider->setValue( m_sunLocator->datetime()->getSpeed() );
+ updateDateTime();
+ if( m_sunLocator->getCitylights() )
+ m_uiWidget.sunShadingComboBox->setCurrentIndex(1);
+ else
+ m_uiWidget.sunShadingComboBox->setCurrentIndex(0);
+ m_uiWidget.centerToolButton->setChecked( m_sunLocator->getCentered() );
+ m_uiWidget.showToolButton->setChecked( m_sunLocator->getShow() );
+ }
+}
+
#include "SunControlWidget.moc"
Modified: marble/trunk/src/lib/SunControlWidget.h
===================================================================
--- marble/trunk/src/lib/SunControlWidget.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/SunControlWidget.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -53,6 +53,7 @@
void datetimeChanged(QDateTime datetime);
protected:
+ void showEvent(QShowEvent* event);
Q_DISABLE_COPY( SunControlWidget )
Ui::SunControlWidget m_uiWidget;
Modified: marble/trunk/src/lib/SunLocator.cpp
===================================================================
--- marble/trunk/src/lib/SunLocator.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/SunLocator.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -21,8 +21,14 @@
#include <QtCore/QDebug>
-using namespace Marble;
+#include <cmath>
+// M_PI is sometimes defined in <cmath>
+#ifndef M_PI
+#define M_PI 3.14159265358979323846264338327950288419717
+#endif
+namespace Marble {
+
using std::sin;
using std::cos;
using std::asin;
@@ -31,94 +37,141 @@
qreal deg2rad(qreal x) { return x*M_PI/180.0; }
qreal rad2deg(qreal x) { return x*180.0/M_PI; }
-const int J2000 = 2451545; // epoch J2000 = 1 January 2000, noon Terrestrial Time (11:58:55.816 UTC)
+// epoch J2000 = 1 January 2000, noon Terrestrial Time (11:58:55.816 UTC)
+const int J2000 = 2451545;
// taking the full moon of 15 January 1900 19:07 UTC as the epoch for the moon
-const qreal MOON_EPOCH = 2415035.297; // value from http://home.hiwaay.net/~krcool/Astro/moon/fullmoon.htm
+// value from http://home.hiwaay.net/~krcool/Astro/moon/fullmoon.htm
+const qreal MOON_EPOCH = 2415035.297;
const qreal MOON_SYNODIC_PERIOD = 29.530588;
-const int update_interval = 60000; // emit updateSun() every update_interval ms
+// emit updateSun() every update_interval ms
+const int update_interval = 60000;
-namespace Marble {
+class SunLocatorPrivate
+{
+public:
+ explicit SunLocatorPrivate(ExtDateTime *dateTime)
+ : m_lon( 0.0 ),
+ m_lat( 0.0 ),
+ m_datetime( dateTime ),
+ m_show( false ),
+ m_citylights( false ),
+ m_centered( false ),
+ m_body( "" )
+ {
+ }
-class SunLocatorPrivate { };
+ qreal m_lon;
+ qreal m_lat;
-}
+ ExtDateTime* m_datetime;
+ bool m_show;
+ bool m_citylights;
+ bool m_centered;
+ QString m_body;
+};
+
SunLocator::SunLocator(ExtDateTime *dateTime)
: QObject(),
- d( new SunLocatorPrivate ),
- m_datetime( dateTime ),
- m_show( false ),
- m_citylights( false ),
- m_centered( false ),
- m_body( "" )
+ d( new SunLocatorPrivate( dateTime ))
{
}
-SunLocator::~SunLocator() {
-// delete m_datetime;
+SunLocator::~SunLocator()
+{
delete d;
}
void SunLocator::updatePosition()
{
- if( m_body == "moon" ) {
- qreal d = (qreal)m_datetime->toJDN() + m_datetime->dayFraction() - MOON_EPOCH; // days since the first full moon of the 20th century
- d /= MOON_SYNODIC_PERIOD; // number of orbits the moon has made (relative to the sun as observed from earth)
- d = d - (int)d; // take fractional part
- if(d < 0.0) d += 1.0; // for dates before MOON_EPOCH
-
- qDebug() << "MOON:" << (int)(d*100) << "% of orbit completed and" << (int)(abs((d-0.5)*2) * 100) << "% illuminated";
-
- m_lon = (1-d) * 2*M_PI;
- m_lat = 0.0; // not necessarily accurate but close enough (only differs by about +-6 degrees of this value)
-
+ if( d->m_body == "moon" ) {
+ // days since the first full moon of the 20th century
+ qreal days = (qreal)d->m_datetime->toJDN() + d->m_datetime->dayFraction() - MOON_EPOCH;
+
+ // number of orbits the moon has made (relative to the sun as observed from earth)
+ days /= MOON_SYNODIC_PERIOD;
+
+ // take fractional part
+ days = days - (int)days;
+
+ // for dates before MOON_EPOCH
+ if (days < 0.0)
+ days += 1.0;
+
+ qDebug() << "MOON:" << (int)(days*100) << "% of orbit completed and"
+ << (int)(abs((days-0.5)*2) * 100) << "% illuminated";
+
+ d->m_lon = (1-days) * 2*M_PI;
+
+ // not necessarily accurate but close enough
+ // (only differs by about +-6 degrees of this value)
+ d->m_lat = 0.0;
return;
}
-
- PlanetaryConstants pc = PC_EARTH; // default to the earth
+
+ // default to the earth
+ PlanetaryConstants pc = PC_EARTH;
// planets
- if ( m_body == "mercury" ) pc = PC_MERCURY;
- else if ( m_body == "venus" ) pc = PC_VENUS;
- else if ( m_body == "earth" ) pc = PC_EARTH;
- else if ( m_body == "mars" ) pc = PC_MARS;
- else if ( m_body == "jupiter" ) pc = PC_JUPITER;
- else if ( m_body == "saturn" ) pc = PC_SATURN;
- else if ( m_body == "uranus" ) pc = PC_URANUS;
- else if ( m_body == "neptune" ) pc = PC_NEPTUNE;
- // dwarf planets ... (everybody likes pluto)
- else if ( m_body == "pluto" ) pc = PC_PLUTO;
-
- long d = m_datetime->toJDN() - J2000; // find current Julian day number relative to epoch J2000
-
+ if ( d->m_body == "mercury" ) pc = PC_MERCURY;
+ else if ( d->m_body == "venus" ) pc = PC_VENUS;
+ else if ( d->m_body == "earth" ) pc = PC_EARTH;
+ else if ( d->m_body == "mars" ) pc = PC_MARS;
+ else if ( d->m_body == "jupiter" ) pc = PC_JUPITER;
+ else if ( d->m_body == "saturn" ) pc = PC_SATURN;
+ else if ( d->m_body == "uranus" ) pc = PC_URANUS;
+ else if ( d->m_body == "neptune" ) pc = PC_NEPTUNE;
+ else if ( d->m_body == "pluto" ) pc = PC_PLUTO;
+
+ // find current Julian day number relative to epoch J2000
+ long day = d->m_datetime->toJDN() - J2000;
+
// from http://www.astro.uu.nl/~strous/AA/en/reken/zonpositie.html
- qreal M = pc.M_0 + pc.M_1*d; // mean anomaly
- qreal C = pc.C_1*sin(M) + pc.C_2*sin(2*M) + pc.C_3*sin(3*M) + pc.C_4*sin(4*M) + pc.C_5*sin(5*M) + pc.C_6*sin(6*M); // equation of center
- qreal nu = M + C; // true anomaly
- qreal lambda_sun = nu + pc.Pi + M_PI; // ecliptic longitude of sun as seen from planet
- qreal delta_sun = asin(sin(pc.epsilon)*sin(lambda_sun)); // declination of sun as seen from planet
- qreal alpha_sun = atan2(cos(pc.epsilon)*sin(lambda_sun), cos(lambda_sun)); // right ascension of sun as seen from planet
-
- qreal theta = alpha_sun; // solar noon occurs when sidereal time is equal to alpha_sun
- m_lon = M_PI - (pc.theta_0 + pc.theta_1 * (d+m_datetime->dayFraction()) - theta); // convert sidereal time to geographic longitude
- while(m_lon < 0) m_lon += 2*M_PI;
- m_lat = -delta_sun; // convert positive north to positive south
-
+ // mean anomaly
+ qreal M = pc.M_0 + pc.M_1*day;
+
+ // equation of center
+ qreal C = pc.C_1*sin(M) + pc.C_2*sin(2*M) + pc.C_3*sin(3*M) + pc.C_4*sin(4*M)
+ + pc.C_5*sin(5*M) + pc.C_6*sin(6*M);
+
+ // true anomaly
+ qreal nu = M + C;
+
+ // ecliptic longitude of sun as seen from planet
+ qreal lambda_sun = nu + pc.Pi + M_PI;
+
+ // declination of sun as seen from planet
+ qreal delta_sun = asin(sin(pc.epsilon)*sin(lambda_sun));
+
+ // right ascension of sun as seen from planet
+ qreal alpha_sun = atan2(cos(pc.epsilon)*sin(lambda_sun), cos(lambda_sun));
+
+ // solar noon occurs when sidereal time is equal to alpha_sun
+ qreal theta = alpha_sun;
+
+ // convert sidereal time to geographic longitude
+ d->m_lon = M_PI - (pc.theta_0 + pc.theta_1 * (day + d->m_datetime->dayFraction()) - theta);
+
+ while(d->m_lon < 0)
+ d->m_lon += 2*M_PI;
+
+ // convert positive north to positive south
+ d->m_lat = -delta_sun;
+
qDebug() << "alpha_sun =" << rad2deg(alpha_sun);
qDebug() << "delta_sun =" << rad2deg(delta_sun);
- qDebug() << "m_lon =" << rad2deg(m_lon);
- qDebug() << "m_lat =" << rad2deg(m_lat);
+ qDebug() << "d->m_lon =" << rad2deg(d->m_lon);
+ qDebug() << "d->m_lat =" << rad2deg(d->m_lat);
}
-qreal SunLocator::shading(qreal lon, qreal lat)
+qreal SunLocator::shading(qreal lon, qreal lat) const
{
-
// haversine formula
- qreal a = sin((lat-m_lat)/2.0);
- qreal b = sin((lon-m_lon)/2.0);
- qreal h = (a*a)+cos(lat)*cos(m_lat)*(b*b);
+ qreal a = sin((lat-d->m_lat)/2.0);
+ qreal b = sin((lon-d->m_lon)/2.0);
+ qreal h = (a*a)+cos(lat)*cos(d->m_lat)*(b*b);
/*
h = 0.0 // directly beneath sun
@@ -129,10 +182,10 @@
qreal twilightZone = 0.0;
- if ( m_body == "earth" || m_body == "venus" ) {
+ if ( d->m_body == "earth" || d->m_body == "venus" ) {
twilightZone = 0.1; // this equals 18 deg astronomical twilight.
}
-
+
qreal brightness;
if ( h <= 0.5 - twilightZone / 2.0 )
brightness = 1.0;
@@ -140,20 +193,21 @@
brightness = 0.0;
else
brightness = ( 0.5 + twilightZone/2.0 - h ) / twilightZone;
-
+
return brightness;
}
-void SunLocator::shadePixel(QRgb& pixcol, qreal brightness)
+void SunLocator::shadePixel(QRgb& pixcol, qreal brightness) const
{
// daylight - no change
if ( brightness > 0.99999 )
return;
-
+
if ( brightness < 0.00001 ) {
// night
-// Doing "pixcol = qRgb(r/2, g/2, b/2);" by shifting some electrons around ;)
- pixcol = qRgb(qRed(pixcol) * 0.35, qGreen(pixcol) * 0.35, qBlue(pixcol) * 0.35); // by shifting some electrons around ;)
+ // Doing "pixcol = qRgb(r/2, g/2, b/2);" by shifting some electrons around ;)
+ // by shifting some electrons around ;)
+ pixcol = qRgb(qRed(pixcol) * 0.35, qGreen(pixcol) * 0.35, qBlue(pixcol) * 0.35);
// pixcol = (pixcol & 0xff000000) | ((pixcol >> 1) & 0x7f7f7f);
} else {
// gradual shadowing
@@ -166,27 +220,27 @@
}
void SunLocator::shadePixelComposite(QRgb& pixcol, QRgb& dpixcol,
- qreal brightness)
+ qreal brightness) const
{
// daylight - no change
if ( brightness > 0.99999 )
return;
-
+
if ( brightness < 0.00001 ) {
// night
pixcol = dpixcol;
} else {
// gradual shadowing
qreal& d = brightness;
-
+
int r = qRed( pixcol );
int g = qGreen( pixcol );
int b = qBlue( pixcol );
-
+
int dr = qRed( dpixcol );
int dg = qGreen( dpixcol );
int db = qBlue( dpixcol );
-
+
pixcol = qRgb( (int)( d * r + (1 - d) * dr ),
(int)( d * g + (1 - d) * dg ),
(int)( d * b + (1 - d) * db ) );
@@ -197,11 +251,10 @@
{
qDebug() << "void SunLocator::update()";
updatePosition();
- if ( m_show || m_centered )
- {
- if ( m_show )
+ if ( d->m_show || d->m_centered ) {
+ if ( d->m_show )
emit updateSun();
- if ( m_centered )
+ if ( d->m_centered )
emit centerSun();
return;
}
@@ -211,12 +264,12 @@
void SunLocator::setShow(bool show)
{
- if ( show == m_show ) {
+ if ( show == d->m_show ) {
return;
}
-
+
qDebug() << "void SunLocator::setShow( bool )";
- m_show = show;
+ d->m_show = show;
updatePosition();
emit updateSun();
@@ -224,14 +277,14 @@
void SunLocator::setCentered(bool centered)
{
- if ( centered == m_centered ) {
+ if ( centered == d->m_centered ) {
return;
}
qDebug() << "SunLocator::setCentered";
qDebug() << "sunLocator =" << this;
- m_centered = centered;
- if ( m_centered ) {
+ d->m_centered = centered;
+ if ( d->m_centered ) {
updatePosition();
emit centerSun();
} else
@@ -240,14 +293,14 @@
void SunLocator::setBody(QString body)
{
- if ( body == m_body ) {
+ if ( body == d->m_body ) {
return;
}
- QString previousBody = m_body;
+ QString previousBody = d->m_body;
- qDebug() << "SunLocator::setBody( QString )";
- m_body = body;
+ qDebug() << "SunLocator::setBody( QString )";
+ d->m_body = body;
updatePosition();
if ( !previousBody.isEmpty() ) {
@@ -255,4 +308,41 @@
}
}
+void SunLocator::setCitylights(bool show)
+{
+ d->m_citylights = show;
+}
+
+bool SunLocator::getShow() const
+{
+ return d->m_show;
+}
+
+bool SunLocator::getCitylights() const
+{
+ return d->m_citylights;
+}
+
+bool SunLocator::getCentered() const
+{
+ return d->m_centered;
+}
+
+qreal SunLocator::getLon() const
+{
+ return d->m_lon * 180.0 / M_PI;
+}
+
+qreal SunLocator::getLat() const
+{
+ return -d->m_lat * 180.0 / M_PI;
+}
+
+ExtDateTime* SunLocator::datetime() const
+{
+ return d->m_datetime;
+}
+
+}
+
#include "SunLocator.moc"
Modified: marble/trunk/src/lib/SunLocator.h
===================================================================
--- marble/trunk/src/lib/SunLocator.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/SunLocator.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -17,30 +17,23 @@
#ifndef SUNLOCATOR_H
#define SUNLOCATOR_H
-#include <cmath>
-// M_PI is sometimes defined in <cmath>
-#ifndef M_PI
-#define M_PI 3.14159265358979323846264338327950288419717
-#endif
#include <QtCore/QObject>
#include <QtCore/QString>
#include <QtGui/QColor>
-//#include <QtCore/QTimer>
-#include "ExtDateTime.h"
//FIXME: This class shouldn't be exposed but is needed by the worldclock plasmoid
#include "marble_export.h"
namespace Marble
{
-
+class ExtDateTime;
class SunLocatorPrivate;
class MARBLE_EXPORT SunLocator : public QObject
{
Q_OBJECT
-
+
public:
/** At the moment Sunlocator does not take ownership of dateTime.
However in the destructor there is a delete commented out.
@@ -50,48 +43,38 @@
explicit SunLocator(ExtDateTime *dateTime);
virtual ~SunLocator();
- qreal shading(qreal lon, qreal lat);
- void shadePixel(QRgb& pixcol, qreal shade);
- void shadePixelComposite(QRgb& pixcol, QRgb& dpixcol, qreal shade);
-
+ qreal shading(qreal lon, qreal lat) const;
+ void shadePixel(QRgb& pixcol, qreal shade) const;
+ void shadePixelComposite(QRgb& pixcol, QRgb& dpixcol, qreal shade) const;
+
void setShow(bool show);
- void setCitylights(bool show) {m_citylights = show;}
+ void setCitylights(bool show);
void setCentered(bool show);
void setBody(QString body);
-
- bool getShow() {return m_show;}
- bool getCitylights() {return m_citylights;}
- bool getCentered() {return m_centered;}
- qreal getLon() {return m_lon * 180.0 / M_PI;}
- qreal getLat() {return -m_lat * 180.0 / M_PI;}
-
- ExtDateTime* datetime() {return m_datetime;}
-
+
+ bool getShow() const;
+ bool getCitylights() const;
+ bool getCentered() const;
+ qreal getLon() const;
+ qreal getLat() const;
+
+ ExtDateTime* datetime() const;
+
public Q_SLOTS:
void update();
-
+
Q_SIGNALS:
void updateStars();
void updateSun();
void centerSun();
void reenableWidgetInput();
-
+
private:
void updatePosition();
SunLocatorPrivate * const d;
- protected:
Q_DISABLE_COPY( SunLocator )
- qreal m_lon;
- qreal m_lat;
-
- ExtDateTime* m_datetime;
- bool m_show;
- bool m_citylights;
- bool m_centered;
- QString m_body;
-// QTimer* m_timer;
};
}
Modified: marble/trunk/src/lib/TextureColorizer.h
===================================================================
--- marble/trunk/src/lib/TextureColorizer.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/TextureColorizer.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -43,7 +43,7 @@
class TextureColorizer
{
public:
- TextureColorizer(const QString&, const QString&);
+ explicit TextureColorizer(const QString&, const QString&);
virtual ~TextureColorizer(){}
void colorize(ViewParams *viewParams);
Modified: marble/trunk/src/lib/TileLoader.cpp
===================================================================
--- marble/trunk/src/lib/TileLoader.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/TileLoader.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -152,11 +152,11 @@
while ( it.hasNext() ) {
it.next();
if ( it.value()->used() == false ) {
-
+ // If inCache == false then the cache is too small to store the tile
+ // but the item will get deleted nevertheless and the pointer we have
+ // doesn't get set to zero (so don't delete it in this case or it will crash!)
bool inCache = d->m_tileCache.insert( it.key(), it.value(), it.value()->numBytes() );
d->m_tileHash.remove( it.key() );
- if ( inCache == false )
- delete it.value();
}
}
}
@@ -167,11 +167,11 @@
QHashIterator<TileId, TextureTile*> it( d->m_tileHash );
while ( it.hasNext() ) {
it.next();
-
+ // If inCache == false then the cache is too small to store the tile
+ // but the item will get deleted nevertheless and the pointer we have
+ // doesn't get set to zero (so don't delete it in this case or it will crash!)
bool inCache = d->m_tileCache.insert( it.key(), it.value(), it.value()->numBytes() );
d->m_tileHash.remove( it.key() );
- if ( inCache == false )
- delete it.value();
}
d->m_tileHash.clear();
Modified: marble/trunk/src/lib/TinyWebBrowser.cpp
===================================================================
--- marble/trunk/src/lib/TinyWebBrowser.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/TinyWebBrowser.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -7,6 +7,7 @@
//
// Copyright 2006-2007 Torsten Rahn <tackat@xxxxxxx>"
// Copyright 2007 Inge Wallin <ingwa@xxxxxxx>"
+// Copyright 2008 Simon Hausmann <hausmann@xxxxxxx>"
//
@@ -54,6 +55,8 @@
return QString ( "http://%1.wikipedia.org/" ).arg ( code );
}
+#if QT_VERSION < 0x040400
+
TinyWebBrowser::TinyWebBrowser ( QWidget *parent )
: QTextBrowser ( parent ),
m_source ( guessWikipediaDomain() )
@@ -78,9 +81,9 @@
<< MarbleDirs::systemPath() + "/cache/";
setSearchPaths ( searchPaths );
-#if QT_VERSION >= 0x040300
+// #if QT_VERSION >= 0x040300
setOpenLinks ( false );
-#endif
+// #endif
setOpenExternalLinks ( false );
}
@@ -220,4 +223,45 @@
format.setMargin ( 12 ) ;
document()->rootFrame()->setFrameFormat ( format );
}
+
+#else
+
+TinyWebBrowser::TinyWebBrowser( QWidget* parent )
+{
+ connect( this, SIGNAL( statusBarMessage( QString ) ),
+ this, SIGNAL( statusMessage( QString ) ) );
+
+ page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
+ connect( this, SIGNAL( linkClicked( QUrl ) ),
+ this, SLOT( openExternalLink( QUrl ) ) );
+}
+
+TinyWebBrowser::~TinyWebBrowser()
+{
+}
+
+void TinyWebBrowser::setSource( const QString& relativeUrl )
+{
+ QUrl url = relativeUrl;
+ if ( url.isRelative() )
+ url = QUrl( guessWikipediaDomain() ).resolved( url );
+ load( url );
+}
+
+void TinyWebBrowser::print()
+{
+ QPrinter printer;
+
+ QPrintDialog dlg( &printer, this );
+ if ( dlg.exec() )
+ QWebView::print( &printer );
+}
+
+void TinyWebBrowser::openExternalLink( QUrl url )
+{
+ QDesktopServices::openUrl( url );
+}
+
+#endif
+
#include "TinyWebBrowser.moc"
Modified: marble/trunk/src/lib/TinyWebBrowser.h
===================================================================
--- marble/trunk/src/lib/TinyWebBrowser.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/TinyWebBrowser.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -15,10 +15,13 @@
// Author: Torsten Rahn
//
+#include <qglobal.h>
#ifndef TINYWEBBROWSER_H
#define TINYWEBBROWSER_H
+#if QT_VERSION < 0x040400
+
#include <QtCore/QString>
#include <QtCore/QVariant>
#include <QtGui/QTextBrowser>
@@ -27,9 +30,8 @@
namespace Marble
{
-
+class CacheStoragePolicy;
class HttpDownloadManager;
-class CacheStoragePolicy;
class TinyWebBrowser : public QTextBrowser
{
@@ -43,7 +45,6 @@
void setSource ( const QString& urlString );
void print();
-
Q_SIGNALS:
void backwardAvailable ( bool );
void statusMessage ( QString );
@@ -61,9 +62,43 @@
Q_DISABLE_COPY ( TinyWebBrowser )
CacheStoragePolicy *m_storagePolicy;
HttpDownloadManager *m_downloadManager;
+
QString m_source;
};
}
+#else
+
+#include <QtWebKit/QWebView>
+#include <QtGui/QDesktopServices>
+
+namespace Marble
+{
+
+class TinyWebBrowser : public QWebView
+{
+ Q_OBJECT
+
+ public:
+ TinyWebBrowser( QWidget* parent = 0 );
+ ~TinyWebBrowser();
+
+ public Q_SLOTS:
+ void setSource( const QString& relativeUrl );
+ void print();
+
+ Q_SIGNALS:
+ void statusMessage( QString );
+
+ private Q_SLOTS:
+ void openExternalLink( QUrl );
+
+ private:
+ QString m_source;
+};
+
+}
+#endif
+
#endif // TINYWEBBROWSER_H
Modified: marble/trunk/src/lib/geodata/handlers/osm-namefinder/NamedTagHandler.cpp
===================================================================
--- marble/trunk/src/lib/geodata/handlers/osm-namefinder/NamedTagHandler.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/geodata/handlers/osm-namefinder/NamedTagHandler.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -106,7 +106,7 @@
qDebug() << "added via parent nearestplaces, not implemented";
} else if ( parentItem.first.first.isEmpty() && !parentItem.second ) {
- // ok, its the parentItem would be searchresults, but we
+ // ok, it is the parentItem would be searchresults, but we
// have here to work around the GeoParser bug
GeoDocument * const document = parser.activeDocument();
Q_ASSERT( document );
Modified: marble/trunk/src/lib/global.h
===================================================================
--- marble/trunk/src/lib/global.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/global.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -133,14 +133,14 @@
// Version definitions to use with an external application (as digiKam)
// String for about dialog.
-const QString MARBLE_VERSION_STRING = QString::fromLatin1( "0.7" );
+const QString MARBLE_VERSION_STRING = QString::fromLatin1( "0.8SVN" );
// API Version id:
// form : 0xMMmmpp
// MM = major revision.
// mm = minor revision.
// pp = patch revision.
-#define MARBLE_VERSION 0x000700
+#define MARBLE_VERSION 0x000800
static const char NOT_AVAILABLE[] = QT_TR_NOOP("not available");
Modified: marble/trunk/src/lib/runners/LatLonRunner.cpp
===================================================================
--- marble/trunk/src/lib/runners/LatLonRunner.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/runners/LatLonRunner.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -49,15 +49,13 @@
{
}
-void LatLonRunner::parse(const QString &input)
+void LatLonRunner::run()
{
- emit runnerStarted();
-
bool successful = false;
- GeoDataCoordinates coord = GeoDataCoordinates::fromString( input, successful );
+ GeoDataCoordinates coord = GeoDataCoordinates::fromString( m_input, successful );
GeoDataPlacemark *placemark = new GeoDataPlacemark();
- placemark->setName( input );
+ placemark->setName( m_input );
qreal lon, lat;
coord.geoCoordinates( lon, lat );
placemark->setCoordinate( lon, lat );
@@ -70,7 +68,7 @@
vector.append( placemark );
}
- emit runnerFinished( vector );
+ emit runnerFinished( this, vector );
}
}
Modified: marble/trunk/src/lib/runners/LatLonRunner.h
===================================================================
--- marble/trunk/src/lib/runners/LatLonRunner.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/runners/LatLonRunner.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -23,6 +23,8 @@
#include "MarbleAbstractRunner.h"
+#include <QtCore/QString>
+
namespace Marble
{
@@ -33,9 +35,8 @@
LatLonRunner(QObject *parent = 0);
~LatLonRunner();
GeoDataFeature::GeoDataVisualCategory category() const;
+ void run();
-public slots:
- void parse(const QString &input);
};
}
Modified: marble/trunk/src/lib/runners/MarbleAbstractRunner.cpp
===================================================================
--- marble/trunk/src/lib/runners/MarbleAbstractRunner.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/runners/MarbleAbstractRunner.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -39,8 +39,9 @@
return GeoDataFeature::Default;
}
-void MarbleAbstractRunner::parse(const QString& /*input*/)
+void MarbleAbstractRunner::parse(const QString &input)
{
+ m_input = input;
}
void MarbleAbstractRunner::run()
Modified: marble/trunk/src/lib/runners/MarbleAbstractRunner.h
===================================================================
--- marble/trunk/src/lib/runners/MarbleAbstractRunner.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/runners/MarbleAbstractRunner.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -66,7 +66,10 @@
* @p input the string to be parsed
*/
virtual void parse(const QString &input);
-
+
+protected:
+ QString m_input;
+
signals:
/**
* This is emitted to indicate that the runner has started to work.
@@ -75,10 +78,11 @@
void runnerStarted();
/**
* This is emitted to indicate that the runner has finished.
+ * @param the address of the runner itself
* @param result the result of the parsing.
* @see parse()
*/
- void runnerFinished(QVector<GeoDataPlacemark*> result);
+ void runnerFinished(MarbleAbstractRunner* runner, QVector<GeoDataPlacemark*> result);
};
}
Modified: marble/trunk/src/lib/runners/OnfRunner.cpp
===================================================================
--- marble/trunk/src/lib/runners/OnfRunner.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/runners/OnfRunner.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -65,14 +65,13 @@
//in order to have a balanced count of active runners. So
//we emit runnerFinished() to balance the previous failed runnerStarted()
QVector<GeoDataPlacemark*> empty;
- emit runnerFinished( empty );
+ emit runnerFinished( this, empty );
return;
}
-void OnfRunner::parse(const QString &input)
+void OnfRunner::run()
{
- emit runnerStarted();
- if( input.isEmpty() ) {
+ if( m_input.isEmpty() ) {
fail();
}
//no point to keep downloading if we're doing a new one
@@ -88,8 +87,8 @@
delete m_buffer;
}
m_buffer = new QBuffer;
- qDebug() << "ONF search: GET /namefinder/search.xml?find=" << input;
- m_http->get( "/namefinder/search.xml?find=" + input, m_buffer );
+ qDebug() << "ONF search: GET /namefinder/search.xml?find=" << m_input;
+ m_http->get( "/namefinder/search.xml?find=" + m_input, m_buffer );
}
void OnfRunner::slotRequestFinished( int id, bool error )
@@ -123,7 +122,7 @@
foreach( GeoDataPlacemark* placemark, placemarks ) {
placemark->setVisualCategory( category() );
}
- emit runnerFinished( placemarks );
+ emit runnerFinished( this, placemarks );
return;
}
Modified: marble/trunk/src/lib/runners/OnfRunner.h
===================================================================
--- marble/trunk/src/lib/runners/OnfRunner.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/lib/runners/OnfRunner.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -24,6 +24,7 @@
#include "MarbleAbstractRunner.h"
#include <QtCore/QString>
+
class QHttp;
class QBuffer;
@@ -37,9 +38,9 @@
OnfRunner(QObject *parent = 0);
~OnfRunner();
GeoDataFeature::GeoDataVisualCategory category() const;
+ void run();
public slots:
- void parse(const QString &input);
void slotRequestFinished( int id, bool error );
private:
void fail();
Modified: marble/trunk/src/marble.kcfg
===================================================================
--- marble/trunk/src/marble.kcfg 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/marble.kcfg 2009-02-24 20:37:32 UTC (rev 3589)
@@ -104,6 +104,17 @@
<default code="true">KGlobalSettings::generalFont()</default>
</entry>
</group>
+ <group name="Sun" >
+ <entry name="showSun" type="Bool" >
+ <default>false</default>
+ </entry>
+ <entry name="showCitylights" type="Bool" >
+ <default>false</default>
+ </entry>
+ <entry name="centerOnSun" type="Bool" >
+ <default>false</default>
+ </entry>
+ </group>
<group name="Navigation" >
<entry key="dragLocation" type="Enum" >
<label>The behaviour of the planet's axis on mouse dragging.</label>
Modified: marble/trunk/src/marble_part.cpp
===================================================================
--- marble/trunk/src/marble_part.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/marble_part.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -130,7 +130,9 @@
KAboutData *MarblePart::createAboutData()
{
- return new KAboutData( I18N_NOOP( "marble_part" ), 0, ki18n( "A Desktop Globe" ), MARBLE_VERSION_STRING.toLatin1() );
+ return new KAboutData( I18N_NOOP( "marble_part" ), 0,
+ ki18n( "A Desktop Globe" ),
+ MARBLE_VERSION_STRING.toLatin1() );
}
bool MarblePart::openUrl( const KUrl &url )
@@ -365,6 +367,11 @@
m_showAtmosphereAction->setChecked( MarbleSettings::showAtmosphere() );
m_lockFloatItemsAct->setChecked(MarbleSettings::lockFloatItemPositions());
lockFloatItemPosition(MarbleSettings::lockFloatItemPositions());
+
+ // Sun
+ m_controlView->sunLocator()->setShow( MarbleSettings::showSun() );
+ m_controlView->sunLocator()->setCitylights( MarbleSettings::showCitylights() );
+ m_controlView->sunLocator()->setCentered( MarbleSettings::centerOnSun() );
// Plugins
QHash<QString, int> pluginEnabled;
@@ -438,6 +445,11 @@
MarbleSettings::setDistanceUnit( MarbleGlobal::getInstance()->locale()->distanceUnit() );
MarbleSettings::setAngleUnit( m_controlView->marbleWidget()->defaultAngleUnit() );
+ // Sun
+ MarbleSettings::setShowSun( m_controlView->sunLocator()->getShow() );
+ MarbleSettings::setShowCitylights( m_controlView->sunLocator()->getCitylights() );
+ MarbleSettings::setCenterOnSun( m_controlView->sunLocator()->getCentered() );
+
// Caches
MarbleSettings::setVolatileTileCacheLimit( m_controlView->marbleWidget()->volatileTileCacheLimit() / 1000 );
MarbleSettings::setPersistentTileCacheLimit( m_controlView->marbleWidget()->persistentTileCacheLimit() / 1000 );
Modified: marble/trunk/src/plasmoid/worldclock.cpp
===================================================================
--- marble/trunk/src/plasmoid/worldclock.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plasmoid/worldclock.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -73,6 +73,7 @@
{
KConfigGroup cg = config();
m_map = new MarbleMap();
+
if(cg.readEntry("projection", static_cast<int>(Equirectangular)) == Mercator)
m_map->setProjection(Mercator);
else
Modified: marble/trunk/src/plugins/designer/latloneditwidget/LatLonEditPlugin.cpp
===================================================================
--- marble/trunk/src/plugins/designer/latloneditwidget/LatLonEditPlugin.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plugins/designer/latloneditwidget/LatLonEditPlugin.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -38,7 +38,7 @@
}
QIcon LatLonEditPlugin::icon() const
{
- return QIcon();
+ return QIcon(":/icons/marble.png");
}
QString LatLonEditPlugin::domXml() const
{
Modified: marble/trunk/src/plugins/render/fileview/FileViewFloatItem.cpp
===================================================================
--- marble/trunk/src/plugins/render/fileview/FileViewFloatItem.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plugins/render/fileview/FileViewFloatItem.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -104,7 +104,11 @@
QPainterPath FileViewFloatItem::backgroundShape() const
{
QPainterPath path;
+#if QT_VERSION >= 0x040400
path.addRoundedRect( QRectF( 0.0, 0.0, renderedRect().size().width() - 1, renderedRect().size().height() - 1 ), 6, 6 );
+#else
+ path.addRoundRect( QRectF( 0.0, 0.0, renderedRect().size().width() - 1, renderedRect().size().height() - 1 ), 6, 6 );
+#endif
return path;
}
@@ -218,9 +222,9 @@
qDebug() << "custom Context menu requested!" << pos;
QMenu *test = new QMenu( m_fileView );
test->move( m_itemPosition );
- connect( test->addAction( "Open new kml file..." ), SIGNAL( triggered() ),
+ connect( test->addAction( tr( "Open new kml file..." ) ), SIGNAL( triggered() ),
this, SLOT( addFile() ) );
- connect( test->addAction("close this kml file..." ), SIGNAL( triggered() ),
+ connect( test->addAction( tr( "close this kml file..." ) ), SIGNAL( triggered() ),
this, SLOT( removeFile() ) );
m_persIndex = new QPersistentModelIndex( m_fileView->indexAt( pos ) );
test->exec();
Modified: marble/trunk/src/plugins/render/navigation/NavigationFloatItem.cpp
===================================================================
--- marble/trunk/src/plugins/render/navigation/NavigationFloatItem.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plugins/render/navigation/NavigationFloatItem.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -13,6 +13,7 @@
#include <QtCore/QRect>
#include <QtGui/QPixmap>
#include <QtGui/QSlider>
+#include <QWidget>
#include "AbstractProjection.h"
#include "MarbleDirs.h"
@@ -107,7 +108,11 @@
QPainterPath NavigationFloatItem::backgroundShape() const
{
QPainterPath path;
+#if QT_VERSION >= 0x040400
path.addRoundedRect( QRectF( 0.0, 0.0, renderedRect().size().width() - 1, renderedRect().size().height() - 1 ), 6, 6 );
+#else
+ path.addRoundRect( QRectF( 0.0, 0.0, renderedRect().size().width() - 1, renderedRect().size().height() - 1 ), 6, 6 );
+#endif
return path;
}
@@ -118,8 +123,13 @@
Q_UNUSED(layer);
// Paint widget without a background
+#if QT_VERSION >= 0x040400
m_navigationParent->render( painter,
QPoint( padding(), padding() ), QRegion(),QWidget::RenderFlags(QWidget::DrawChildren));
+#else
+ m_navigationParent->render( painter->device(),
+ QPoint( padding(), padding() ), QRegion(),QWidget::RenderFlag(QWidget::DrawChildren));
+#endif
return true;
}
Added: marble/trunk/src/plugins/render/panoramio/Panoramio.py
===================================================================
--- marble/trunk/src/plugins/render/panoramio/Panoramio.py (rev 0)
+++ marble/trunk/src/plugins/render/panoramio/Panoramio.py 2009-02-24 20:37:32 UTC (rev 3589)
@@ -0,0 +1,20 @@
+#this is a sample parnomaio query rpely script in python
+
+
+import httplib
+import json
+
+conn = httplib.HTTPConnection("www.panoramio.com",80)
+conn.request("GET","/map/get_panoramas.php?order=popularity&set=public&from=0&to=10&minx=-124.29382324218749&miny=36.089060460282006&maxx=-119.8773193359375&maxy=38.724090458956965")
+
+r1 = conn.getresponse()
+print r1.status
+data1 = r1.read()
+#print data1
+a=json.loads (data1)
+#print a
+#print a
+for keys,x in a.iteritems() :
+ z=x
+ print z , ":::::::::::::keys" , keys,"\n"
+a=json.load(keys)
Modified: marble/trunk/src/plugins/render/panoramio/PanoramioPlugin.cpp
===================================================================
--- marble/trunk/src/plugins/render/panoramio/PanoramioPlugin.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plugins/render/panoramio/PanoramioPlugin.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -104,10 +104,10 @@
painter->setPen(Qt::Dense1Pattern);
painter->setPen(Qt::white);
painter->drawRect(GeoDataCoordinates(parsedData[x].longitude, parsedData[x].latitude, 0.0, GeoDataCoordinates::Degree),/*parsedData[x].height , parsedData[x].width*/50, 50);
-// qDebug() <<"Shanky: Coordinates are lon-lat: " << parsedData[x].longitude << parsedData[x].latitude;
+ qDebug() <<"Shanky: Coordinates are lon-lat: " << parsedData[x].longitude << parsedData[x].latitude;
}
}
- qDebug() << "deltas" << west - deltaWest << east - deltaEast << south - deltaSouth << north - deltaNorth;
+ //qDebug() << "deltas" << west - deltaWest << east - deltaEast << south - deltaSouth << north - deltaNorth;
deltaWest = west;
deltaEast = east ;
@@ -124,11 +124,12 @@
for (int x = 0; x < numberOfImagesToShow; ++x) {
temp = panoramioJsonParser.parseObjectOnPosition(QString::fromUtf8(m_storagePolicy->data(id)), x);
parsedData.append(temp);
+// qDebug()<<temp.photo_file_url;
if (!m_storagePolicy->fileExists(temp.photo_title)) {
m_downloadManager->addJob(QUrl(temp.photo_file_url), temp.photo_title, QString::number(x));
- qDebug() << "skipping " << temp.photo_title;
+ qDebug() << "adding " << temp.photo_title;
}
- qDebug() << ":::::::shanky1" << temp.photo_file_url;
+ // qDebug() << ":::::::shanky1" << temp.photo_file_url;
}
// HttpJob *job = new HttpJob ( sourceUrl, destFileName, id );
@@ -140,7 +141,7 @@
// temp.loadFromData ( m_storagePolicy->data ( id ) );
tempImage.load(MarbleDirs::localPath() + "/cache/" + relativeUrlString);
- imagesWeHave.append(tempImage.scaled(QSize(50, 50), Qt::IgnoreAspectRatio , Qt::SmoothTransformation));
+ imagesWeHave.append(tempImage.scaled(QSize(50, 50), Qt::IgnoreAspectRatio , Qt::FastTransformation));
qDebug() << "::::::::::::::shanky2" << id << "=" << tempImage.isNull() << MarbleDirs::localPath() + "/cache/" + relativeUrlString ;
flag = 1;
}
@@ -155,7 +156,7 @@
+ "&maxx=" + QString::number(north * RADIANSTODEGREES)
+ "&maxy=" + QString::number(south * RADIANSTODEGREES) + "&size=medium"), "panoramio" + QString::number(east), "panoramio" + QString::number(east));
connect(m_downloadManager, SIGNAL(downloadComplete(QString, QString)), this, SLOT(slotJsonDownloadComplete(QString , QString)));
- qDebug() << "::::::::::::::shanky0";
+// qDebug() << "::::::::::::::shanky0";
// job = new HttpJob ( QUrl ( "http://www.panoramio.com/map/get_panoramas.php?from="
// + QString::number ( rangeFrom )
// + "&to=" + QString::number ( rangeTo )
Modified: marble/trunk/src/plugins/render/panoramio/jsonparser.cpp
===================================================================
--- marble/trunk/src/plugins/render/panoramio/jsonparser.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plugins/render/panoramio/jsonparser.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -9,6 +9,7 @@
jsonParser::jsonParser()
{
+ myEngine.setProcessEventsInterval(10);//this lets the gui remain responsive
}
jsonParser::~jsonParser()
@@ -19,10 +20,17 @@
{
QString temp = "var myJSONObject =" + content;
myEngine.evaluate(temp);
+ myEngine.evaluate(QString("function count(){ return myJSONObject.count };"));
+ myEngine.evaluate(QString("function height(x){return myJSONObject.photos[x].height};"));
+ myEngine.evaluate(QString("function latitude(x){return myJSONObject.photos[x].latitude};"));
+ myEngine.evaluate(QString("function longitude (x){return myJSONObject.photos[x].longitude};"));
+ myEngine.evaluate(QString("function owner_id(x){return myJSONObject.photos[x].owner_id};"));
+ myEngine.evaluate(QString("function photo_file_url(x){return myJSONObject.photos[x].photo_file_url};"));
- dataStorage.count = myEngine.evaluate("return myJSONObject.count;").toInteger();
+
+ dataStorage.count = myEngine.evaluate("count();").toInteger();
- dataStorage.height = myEngine.evaluate(QString("return myJSONObject.photos[")
+/* dataStorage.height = myEngine.evaluate(QString("return myJSONObject.photos[")
+ QString::number(requiredObjectPosition)
+ QString("].height;")) .toInteger();
dataStorage.latitude = myEngine.evaluate(QString("return myJSONObject.photos[")
@@ -59,13 +67,18 @@
+ QString::number(requiredObjectPosition)
+ QString("].width;")).toInteger();
-
+*/
+ myEngine.evaluate(QString("var x="+QString::number(requiredObjectPosition)));
+ dataStorage.longitude=myEngine.evaluate(QString("longitude(x)")).toNumber();
+ dataStorage.latitude=myEngine.evaluate(QString("latitude(x)")).toNumber();
+ dataStorage.photo_file_url=myEngine.evaluate(QString("photo_file_url(x)")).toString();
+//qDebug()<<":::::::"<<myEngine.evaluate("longitude(x)").toNumber();
return dataStorage;
}
QList <panoramioDataStructure> jsonParser::parseAllObjects(const QString &content , int numberOfObjects)
{
- QString temp = "var myJSONObject = " + content;
+ /*QString temp = "var myJSONObject = " + content;
int iterator = 0;//the count starts fom one
myEngine.evaluate(temp);
@@ -111,6 +124,6 @@
parsedJsonOutput.insert(iterator , dataStorage);
++iterator;
}
-
+*/
return parsedJsonOutput;
}
Modified: marble/trunk/src/plugins/render/panoramio/jsonparser.h
===================================================================
--- marble/trunk/src/plugins/render/panoramio/jsonparser.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plugins/render/panoramio/jsonparser.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -33,8 +33,8 @@
QString photo_title; // Title of each photograph
QString photo_url; // Url of each photograph
QString photo_file_url;
- qreal longitude;
- qreal latitude;
+ int longitude;
+ int latitude;
int width;
int height;
QString upload_date;
@@ -43,9 +43,8 @@
QString owner_url; // Url of the User Uplaoded
};
-class jsonParser : public QObject
+class jsonParser
{
- Q_OBJECT
public:
jsonParser();
Modified: marble/trunk/src/plugins/render/twitter/jsonparser.cpp
===================================================================
--- marble/trunk/src/plugins/render/twitter/jsonparser.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plugins/render/twitter/jsonparser.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -9,6 +9,7 @@
jsonParser::jsonParser()
{
+ myEngine.setProcessEventsInterval(10);//this lets the gui remain responsive
}
jsonParser::~jsonParser()
@@ -18,7 +19,7 @@
twitterDataStructure jsonParser::parseObjectOnPosition(const QString &content , int requiredObjectPosition)
{
- QString temp = "var myJSONObject =" + content;
+ /* QString temp = "var myJSONObject =" + content;
myEngine.evaluate(temp);
dataStorage.user = myEngine.evaluate(QString("return myJSONObject.photos[")
@@ -31,7 +32,7 @@
+ QString::number(requiredObjectPosition)
+ QString("].text;")).toString();
-
+*/
return dataStorage;
}
@@ -39,38 +40,53 @@
{
QString temp = "var myJSONObject = { \"twitter\":" + content + "}";
int iterator = 0;//the count starts fom one
+//qDebug()<<"::::::::::::::::::::::::"<<temp;
+if (temp != "Twitter is down for database maintenance. It will return in about 30 minutes")
+{
+ myEngine.evaluate(QString("function userName(k){return myJSONObject.twitter[k].user.name};"));
+ myEngine.evaluate(QString("function userLocation(k){return myJSONObject.twitter[k].user.location};"));
+ myEngine.evaluate(QString("function userText(k){return myJSONObject.twitter[k].text};"));
myEngine.evaluate(temp);
while ((iterator) < numberOfObjects) {
- dataStorage.user = myEngine.evaluate(QString("return myJSONObject.twitter[")
- + QString::number(iterator)
- + QString("].user.name;")).toString();
- dataStorage.location = myEngine.evaluate(QString("return myJSONObject.twitter[")
- + QString::number(iterator)
- + QString("].user.location;")).toString();
- dataStorage.text = myEngine.evaluate(QString("return myJSONObject.twitter[")
- + QString::number(iterator)
- + QString("].text;")).toString();
- parsedJsonOutput.insert(iterator , dataStorage);
+ myEngine.evaluate(QString("var a ="+QString::number(iterator) )).toString();
+ dataStorage.user=myEngine.evaluate(QString("userName(a)")).toString();
+ dataStorage.location=myEngine.evaluate(QString("userLocation(a)")).toString();
+ dataStorage.text=myEngine.evaluate(QString("userText(a)")).toString();
+
+ parsedJsonOutput.insert(iterator , dataStorage);
- /*qDebug() << "in json parser" << myEngine.evaluate(QString("return myJSONObject.twitter[" + QString::number(iterator) + "].user.location")).toString() << dataStorage.location;*/
++iterator;
}
+//qDebug()<<"::::::::::::::::::::::"<<dataStorage.user;
- return parsedJsonOutput;
+//qDebug()<<":::::::::::::::::parsed Output"<<parsedJsonOutput[0].location;
}
+else
+{
+//twitter is down :(
+dataStorage.user="@Twitter Plugin";
+dataStorage.location="Equator";
+dataStorage.text="Twitter is down , Please try in 30 minutes " ;
+parsedJsonOutput<<dataStorage;
+}
+ return parsedJsonOutput;
+}
+
googleMapDataStructure jsonParser::geoCodingAPIparseObject(QString content)
{
-// qDebug() << "in geoCodingAPIparseObject";
+ qDebug() << "in geoCodingAPIparseObject";
QString temp = "var myJSONObject = " + content;
googleMapDataStructure returnStructure;
+ myEngine.evaluate("function lat(){return myJSONObject.Placemark[0].Point.coordinates[0]}");
+ myEngine.evaluate("function lon(){return myJSONObject.Placemark[0].Point.coordinates[1]}");
+ myEngine.evaluate(temp);
- myEngine.evaluate(temp);
- returnStructure.lat = myEngine.evaluate("return myJSONObject.Placemark[0].Point.coordinates[0]").toNumber();
- returnStructure.lon = myEngine.evaluate("return myJSONObject.Placemark[0].Point.coordinates[1]").toNumber();
-// qDebug() << "twitter lan lon text=" << returnStructure.lat << returnStructure.lon;
+ returnStructure.lon = myEngine.evaluate("lon()").toNumber();
+ returnStructure.lat = myEngine.evaluate("lat()").toNumber();
+ qDebug() << "twitter lan lon text=" << returnStructure.lat << returnStructure.lon;
return returnStructure;
}
Modified: marble/trunk/src/plugins/render/twitter/jsonparser.h
===================================================================
--- marble/trunk/src/plugins/render/twitter/jsonparser.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plugins/render/twitter/jsonparser.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -39,15 +39,15 @@
qreal lon;
};
-class jsonParser : public QObject
+class jsonParser
{
- Q_OBJECT
+
public:
jsonParser();
~jsonParser();
- twitterDataStructure parseObjectOnPosition(const QString &content, int requiredObjectPosition); //for parsing single object
+ twitterDataStructure parseObjectOnPosition(const QString &content, int requiredObjectPosition); //for parsing single object
QList<twitterDataStructure> parseAllObjects(const QString &content, int numberOfObjects); //for parsing a list objects
@@ -59,6 +59,7 @@
twitterDataStructure dataStorage;
QScriptEngine myEngine;
+
};
Modified: marble/trunk/src/plugins/render/twitter/twitterPlugin.cpp
===================================================================
--- marble/trunk/src/plugins/render/twitter/twitterPlugin.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plugins/render/twitter/twitterPlugin.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -16,15 +16,15 @@
#include <QSize>
#include <QRegExp>
-namespace Marble
-{
+using namespace Marble;
+
/**
Right now this plugin displays public twit from Twitter , and gecocodes [i.e getting lat lon from a given street address] using Google Map API , i plan to extend it to use OSM GeoCoding in net few days :) [The API key has been taken for my personal website , please don't misuse it :) ]
*/
twitterPlugin::~twitterPlugin()
{
- delete m_storagePolicy;
+// delete m_storagePolicy;
}
QStringList twitterPlugin::backendTypes() const
@@ -74,7 +74,7 @@
m_storagePolicy = new CacheStoragePolicy(MarbleDirs::localPath() + "/cache/");
m_downloadManager = new HttpDownloadManager(QUrl("http://twiter.com"), m_storagePolicy);
downloadtwitter(0, 0, 0.0, 0.0, 0.0, 0.0);
-// qDebug() << "twitter plugin was started";
+ qDebug() << "twitter plugin was started";
}
bool twitterPlugin::isInitialized() const
@@ -93,38 +93,46 @@
if (privateFlagForRenderingTwitts >= 1) {
for (int counter = 0;counter < 4;counter++)
- painter->drawAnnotation(twitsWithLocation[counter].location,
+//painter->drawAnnotation(GeoDataCoordinates(0.0,0.0),"hiiiiiiiiii");
+
+painter->drawAnnotation(twitsWithLocation[counter].location,
parsedData[counter].user + " said \n"
+ parsedData[counter].text,
- QSize(140, 140));
+ QSize(140, 140)) ;
} else {
painter->drawAnnotation(GeoDataCoordinates(0.0, 0.0, 0.0,
GeoDataCoordinates::Degree),
- "Twitts are being Downlaoded @Twitter Plugin");
+ "Twitts are being Downlaoded @Twitter/Identi.CA Plugin");
}
return true;
}
void twitterPlugin::slotJsonDownloadComplete(QString relativeUrlString, QString id)
{
-// temp.twitter = parsedData[counter].text ;
- parsedData = twitterJsonParser.parseAllObjects(QString::fromUtf8(m_storagePolicy->data(id)), 20);
-
+static int counter=0;
+twitterStructure temp;
+//qDebug()<<"::::"<<temp.;
+//temp.twit = parsedData[counter].text ;
+ parsedData = twitterJsonParser.parseAllObjects(QString::fromUtf8(m_storagePolicy->data(id)), 20);
+qDebug()<<"::::::::::::::::slot"<<parsedData[0].text;
disconnect(m_downloadManager, SIGNAL(downloadComplete(QString, QString)), this, SLOT(slotJsonDownloadComplete(QString , QString)));
connect(m_downloadManager, SIGNAL(downloadComplete(QString, QString)), this, SLOT(slotGeoCodingReplyRecieved(QString , QString)));
for (int counter = 0;counter < 10;counter++) {
- if (parsedData[counter].location != "null") {
- parsedData[counter].location.replace(QRegExp("[?,:!/\\s]+"), "+");//remove whitespace and replace it with + for query api
+ if (parsedData[counter].location != "null") {
+ parsedData[counter].location.replace(QRegExp("[?,:!/\\s]+"), "+");//remove whitespace and replace it with + for query api
findLatLonOfStreetAddress(parsedData [ counter ].location) ; //this will set temp
- }
+ }
}
}
void twitterPlugin::downloadtwitter(int rangeFrom , int rangeTo , qreal east , qreal west , qreal north , qreal south)
{
+qDebug()<<"::::::downloading"<<rangeFrom ;
+/** to use identi.ca line also */
m_downloadManager->addJob(QUrl("http://twitter.com/statuses/public_timeline.json"), "twitter", "twitter");
+// m_downloadManager->addJob(QUrl("http://identi.ca/api/statuses/public_timeline.json"), "identica", "identica");
connect(m_downloadManager, SIGNAL(downloadComplete(QString, QString)), this, SLOT(slotJsonDownloadComplete(QString , QString)));
@@ -143,18 +151,18 @@
twitterStructure twitterData;
googleMapDataStructure geoCodedData;
- geoCodedData = twitterJsonParser.geoCodingAPIparseObject(QString::fromUtf8(m_storagePolicy->data(id))) ;
-// twitterData.twit = "hi" ;
+ geoCodedData = twitterJsonParser.geoCodingAPIparseObject(QString::fromUtf8(m_storagePolicy->data(id))) ;
+ twitterData.twit = "hi" ;
twitterData.location = GeoDataCoordinates(geoCodedData.lat, geoCodedData.lon, 1.0, GeoDataCoordinates::Degree);
- twitsWithLocation.append(twitterData);
- localCountOfTwitts ++;
-// qDebug()<<"twitter count has value == " << count ;
- if (localCountOfTwitts >= 5)
+ twitsWithLocation.append(twitterData);
+ localCountOfTwitts ++;
+qDebug()<<"::::::::::::::::::::twitter count has value == " << localCountOfTwitts;
+ if (localCountOfTwitts >= 1)
privateFlagForRenderingTwitts = 1;//1 means unblock
}
-}
+
Q_EXPORT_PLUGIN2(twitterPlugin, Marble::twitterPlugin)
-// #include "twitterPlugin.moc"
+ #include "twitterPlugin.moc"
Modified: marble/trunk/src/plugins/render/twitter/twitterPlugin.h
===================================================================
--- marble/trunk/src/plugins/render/twitter/twitterPlugin.h 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/plugins/render/twitter/twitterPlugin.h 2009-02-24 20:37:32 UTC (rev 3589)
@@ -35,7 +35,7 @@
*
*/
struct twitterStructure {
- QString twitter ;
+ QString twit ;
GeoDataCoordinates location;
};
@@ -70,6 +70,7 @@
bool render(GeoPainter *painter, ViewportParams *viewport, const QString& renderPos, GeoSceneLayer * layer = 0);
~twitterPlugin();
+
public slots:
void slotJsonDownloadComplete(QString , QString); //completed download of json reply fom panoramio
void slotGeoCodingReplyRecieved(QString , QString); //completed download of image
@@ -83,7 +84,7 @@
void downloadtwitter(int, int, qreal, qreal, qreal, qreal);
QList <twitterStructure > twitsWithLocation;//this list will hold pointers to TWITT we have downloaded successfully figured out :)
QList <twitterDataStructure> parsedData;
- void findLatLonOfStreetAddress(QString streetAddress);
+ void findLatLonOfStreetAddress(QString streetAddress);
int privateFlagForRenderingTwitts;//this flag is one when globe has an Image (downloaded or already there in cache)
};
Modified: marble/trunk/src/qtmain.cpp
===================================================================
--- marble/trunk/src/qtmain.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/src/qtmain.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -90,7 +90,7 @@
// window->marbleWidget()->rotateTo( 0, 0, -90 );
- window->show();
+// window->show();
for ( int i = 1; i < argc; ++i ) {
if ( strcmp( argv[ i ], "--timedemo" ) == 0 )
Modified: marble/trunk/tools/iau2kml/iau2kml.cpp
===================================================================
--- marble/trunk/tools/iau2kml/iau2kml.cpp 2009-02-24 20:21:40 UTC (rev 3588)
+++ marble/trunk/tools/iau2kml/iau2kml.cpp 2009-02-24 20:37:32 UTC (rev 3589)
@@ -91,7 +91,7 @@
rawline = sourcestream.readLine();
// if ( !rawline.startsWith("\"E\"|\"m\"|\"" ) ) {
- if ( !rawline.startsWith("\"M\"|\"M\"|\"" ) ) {
+ if ( !rawline.startsWith("\"V\"|\"V\"|\"" ) ) {
continue;
}
rawline = rawline.replace( "\"|", "|" );
@@ -124,8 +124,9 @@
lon = lonString.toFloat();
- if ( !rawline.startsWith("\"M\"|\"M\"|\"" ) ) {
- if ( lon > 180.0 ) lon = lon - 360.0;
+ if ( lon > 180.0 ) lon = lon - 360.0;
+
+ if ( rawline.startsWith("\"M\"|\"M\"|\"" ) || rawline.startsWith("\"V\"|\"V\"|\"" ) ) {
lon = -lon;
}