[vlmc-devel] [PATCH 2/2] RecentProjects: Use QVariantList to store m_recentsProjects
Yikai Lu
luyikei.qmltu at gmail.com
Sun Apr 10 09:26:56 CEST 2016
---
src/Gui/wizard/WelcomePage.cpp | 10 ++---
src/Project/RecentProjects.cpp | 94 +++++++++---------------------------------
src/Project/RecentProjects.h | 20 +--------
3 files changed, 27 insertions(+), 97 deletions(-)
diff --git a/src/Gui/wizard/WelcomePage.cpp b/src/Gui/wizard/WelcomePage.cpp
index a598383..6e44cb8 100644
--- a/src/Gui/wizard/WelcomePage.cpp
+++ b/src/Gui/wizard/WelcomePage.cpp
@@ -118,13 +118,13 @@ void
WelcomePage::loadRecentsProjects()
{
m_ui.projectsListWidget->clear();
- const RecentProjects::List& recents = Core::instance()->recentProjects()->list();
- for ( int i = 0; i < recents.count(); ++i )
+ for ( const auto& var : Core::instance()->recentProjects()->toVariant().toList() )
{
- RecentProjects::RecentProject project = recents.at( i );
- QListWidgetItem* item = new QListWidgetItem( project.name );
- item->setData( FilePath, project.filePath );
+ const auto& name = var.toMap()["name"].toString();
+ const auto& filePath = var.toMap()["file"].toString();
+ QListWidgetItem* item = new QListWidgetItem( name );
+ item->setData( FilePath, filePath );
m_ui.projectsListWidget->addItem( item );
}
}
diff --git a/src/Project/RecentProjects.cpp b/src/Project/RecentProjects.cpp
index ec4df43..7a7caf9 100644
--- a/src/Project/RecentProjects.cpp
+++ b/src/Project/RecentProjects.cpp
@@ -32,94 +32,40 @@ RecentProjects::RecentProjects( Settings* vlmcSettings, QObject *parent )
: QObject(parent)
, m_settings( new Settings )
{
- SettingValue* recentProjects = m_settings->createVar( SettingValue::String, "private/RecentsProjects", "",
+ auto value = m_settings->createVar( SettingValue::List, "private/RecentsProjects", QVariantList(),
"", "", SettingValue::Private );
vlmcSettings->addSettings( "RecentProjects", *m_settings );
- connect( recentProjects, SIGNAL( changed( QVariant ) ), this, SLOT( loadRecentProjects( QVariant ) ) );
+ connect( m_settings, &Settings::postLoad, this, [this, value](){ m_recentsProjects = value->get().toList(); } );
}
-void
-RecentProjects::projectLoaded(const QString& projectName, const QString& projectFile)
+QVariant
+RecentProjects::toVariant() const
{
- removeFromRecentProjects( projectName );
- RecentProject project;
- project.name = projectName;
- project.filePath = projectFile;
- m_recentsProjects.prepend( project );
- while ( m_recentsProjects.count() > 15 )
- m_recentsProjects.removeLast();
-
- m_settings->setValue( "private/RecentsProjects", flattenProjectList() );
-}
-
-const RecentProjects::List&
-RecentProjects::list() const
-{
- return m_recentsProjects;
-}
-
-QString
-RecentProjects::flattenProjectList() const
-{
- if ( m_recentsProjects.count() == 0 )
- return QString();
- QString res;
- foreach ( RecentProject p, m_recentsProjects )
- {
- res += p.name + '#' + p.filePath + '#';
- }
- res.chop(1);
- return res;
+ return QVariant( m_recentsProjects );
}
void
-RecentProjects::removeFromRecentProjects( const QString &projectPath )
+RecentProjects::remove( const QString &projectFile )
{
- List::iterator it = m_recentsProjects.begin();
- List::iterator ite = m_recentsProjects.end();
-
- while ( it != ite )
+ for ( int i = 0; i < m_recentsProjects.count(); ++i )
{
- if ( (*it).filePath == projectPath )
- it = m_recentsProjects.erase( it );
- else
- ++it;
+ if ( m_recentsProjects[i].toMap()["file"].toString() == projectFile )
+ {
+ m_recentsProjects.removeAt( i );
+ --i;
+ }
}
}
void
-RecentProjects::remove( const QString& projectPath )
-{
- removeFromRecentProjects( projectPath );
- m_settings->setValue( "private/RecentsProjects", flattenProjectList() );
-}
-
-void
-RecentProjects::loadRecentProjects( const QVariant& recentProjects )
+RecentProjects::projectLoaded(const QString& projectName, const QString& projectFile)
{
- // Only watch initial loading, we are now taking ownership of "private/RecentsProjects settings"
- disconnect( this, SLOT( loadRecentProjects( QVariant ) ) );
-
- const QStringList recentProjectsList = recentProjects.toString().split( '#' );
-
- if ( recentProjectsList.count() == 0 )
- return ;
-
- QStringList::const_iterator it = recentProjectsList.begin();
- QStringList::const_iterator ite = recentProjectsList.end();
- while ( it != ite )
- {
- RecentProject project;
- project.name = *it;
- ++it;
- if ( it == ite )
- {
- vlmcWarning() << "Invalid flattened recent projects list.";
- return ;
- }
- project.filePath = *it;
- ++it;
- m_recentsProjects.append( project );
- }
+ QVariantMap var {
+ { "name", projectName },
+ { "file", projectFile }
+ };
+ m_recentsProjects.removeAll( var );
+ m_recentsProjects.insert( 0, var );
+ m_settings->setValue( "private/RecentsProjects", m_recentsProjects );
}
diff --git a/src/Project/RecentProjects.h b/src/Project/RecentProjects.h
index eb2c64f..692612a 100644
--- a/src/Project/RecentProjects.h
+++ b/src/Project/RecentProjects.h
@@ -33,32 +33,16 @@ class RecentProjects : public QObject
Q_OBJECT
public:
- struct RecentProject
- {
- QString name;
- QString filePath;
- };
- typedef QList<RecentProject> List;
-
explicit RecentProjects(Settings* vlmcSettings, QObject *parent = 0 );
-
+ QVariant toVariant() const;
void remove( const QString& projectFile );
- const List& list() const;
-
- private:
- void removeFromRecentProjects( const QString &projectPath );
- QString flattenProjectList() const;
-
public slots:
void projectLoaded( const QString& projectName, const QString& projectFile );
- private slots:
- void loadRecentProjects(const QVariant& recentProjects);
-
private:
Settings* m_settings;
- List m_recentsProjects;
+ QVariantList m_recentsProjects;
};
--
1.9.1
More information about the Vlmc-devel
mailing list