[kde-doc-english] [marble] src: Add a Recent Files menu

Dennis Nienhüser earthwings at gentoo.org
Thu Apr 11 20:38:56 UTC 2013


Git commit 5a74e0604dd116257361899bc58a8d3be958c419 by Dennis Nienhüser, on behalf of Andrei Duma.
Committed on 11/04/2013 at 22:36.
Pushed by nienhueser into branch 'master'.

Add a Recent Files menu

REVIEW: 109968
FEATURE: 310053
GUI:

M  +22   -4    src/marble_part.cpp
M  +2    -0    src/marble_part.h
M  +1    -0    src/marble_part.rc

http://commits.kde.org/marble/5a74e0604dd116257361899bc58a8d3be958c419

diff --git a/src/marble_part.cpp b/src/marble_part.cpp
index 90be6af..d68637a 100644
--- a/src/marble_part.cpp
+++ b/src/marble_part.cpp
@@ -125,6 +125,7 @@ MarblePart::MarblePart( QWidget *parentWidget, QObject *parent, const QVariantLi
     m_timeControlDialog( 0 ),
     m_downloadRegionDialog( 0 ),
     m_externalMapEditorAction( 0 ),
+    m_recentFilesAction( 0 ),
     m_configDialog( 0 ),
     m_position( i18n( NOT_AVAILABLE ) ),
     m_tileZoomLevel( i18n( NOT_AVAILABLE ) ),
@@ -213,9 +214,17 @@ KAboutData *MarblePart::createAboutData()
 
 bool MarblePart::openUrl( const KUrl &url )
 {
-    Q_UNUSED( url );
+    QFileInfo fileInfo( url.toLocalFile() );
+    if ( fileInfo.isReadable() ) {
+        m_controlView->marbleModel()->addGeoDataFile( url.toLocalFile() );
+        m_recentFilesAction->addUrl( url );
+        return true;
+    }
 
-    return true;
+    KMessageBox::error( widget(),
+        tr( "Sorry, unable to open '%1'. The file is not accessible." ).arg( fileInfo.fileName() ),
+        tr( "File not accessible" ) );
+    return false;
 }
 
 bool MarblePart::openFile()
@@ -252,13 +261,12 @@ bool MarblePart::openFile()
     }
 
     foreach( const QString &fileName, fileNames ) {
-        m_controlView->marbleModel()->addGeoDataFile( fileName );
+        openUrl( fileName );
     }
 
     return true;
 }
 
-
 void MarblePart::exportMapScreenShot()
 {
     QString  fileName = KFileDialog::getSaveFileName( QDir::homePath(),
@@ -649,6 +657,10 @@ void MarblePart::writeSettings()
 
     writeStatusBarSettings();
 
+    // Store recent files
+    KSharedConfig::Ptr sharedConfig = KSharedConfig::openConfig( KGlobal::mainComponent() );
+    m_recentFilesAction->saveEntries( sharedConfig->group( "RecentFiles" ) );
+
     // Store current route settings
     RoutingManager *routingManager = m_controlView->marbleWidget()->model()->routingManager();
     routingManager->writeSettings();
@@ -677,6 +689,12 @@ void MarblePart::writeStatusBarSettings()
 
 void MarblePart::setupActions()
 {
+    // Action: Recent Files
+    m_recentFilesAction = KStandardAction::openRecent( this, SLOT(openUrl(KUrl)),
+                                                       actionCollection() );
+    KSharedConfig::Ptr sharedConfig = KSharedConfig::openConfig( KGlobal::mainComponent() );
+    m_recentFilesAction->loadEntries( sharedConfig->group( "RecentFiles" ) );
+
     // Action: Download Region
     m_downloadRegionAction = new KAction( this );
     m_downloadRegionAction->setText( i18nc( "Action for downloading an entire region of a map",
diff --git a/src/marble_part.h b/src/marble_part.h
index 6bc3a1c..2f6752a 100644
--- a/src/marble_part.h
+++ b/src/marble_part.h
@@ -20,6 +20,7 @@
 #include <kmenu.h>
 #include <kurl.h>
 #include "MarbleGlobal.h"
+#include <krecentfilesaction.h>
 
 class KAboutData;
 class KAction;
@@ -210,6 +211,7 @@ class MarblePart: public KParts::ReadOnlyPart
     KAction      *m_lockFloatItemsAct;
     KAction      *m_mapWizardAct;
     KAction      *m_externalMapEditorAction;
+    KRecentFilesAction *m_recentFilesAction;
 
     //Bookmark Menu
     KAction *m_addBookmarkAction;
diff --git a/src/marble_part.rc b/src/marble_part.rc
index 26e3c37..52513aa 100644
--- a/src/marble_part.rc
+++ b/src/marble_part.rc
@@ -5,6 +5,7 @@
   <Menu name="file" noMerge="1">
     <text>&File</text>
     <Action name="file_open"/>
+    <Action name="file_open_recent"/>
     <Action name="new_stuff"/>
     <Action name="createMap"/>
     <Action name="file_download_region"/>


More information about the kde-doc-english mailing list