[vlmc-devel] [PATCH] RecentProjects: Use QVariantList to store m_recentsProjects

yikei lu luyikei.qmltu at gmail.com
Sun Apr 10 14:55:34 CEST 2016


the previous "use a child settings" patch is not needed

2016-04-10 21:53 GMT+09:00 Yikai Lu <luyikei.qmltu at gmail.com>:
> ---
>  src/Gui/wizard/WelcomePage.cpp |  10 ++--
>  src/Project/RecentProjects.cpp | 103 +++++++++--------------------------------
>  src/Project/RecentProjects.h   |  21 ++-------
>  3 files changed, 30 insertions(+), 104 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 70c5a95..4985d5b 100644
> --- a/src/Project/RecentProjects.cpp
> +++ b/src/Project/RecentProjects.cpp
> @@ -20,105 +20,46 @@
>   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
>   *****************************************************************************/
>
> -#include <QStringList>
> -
>  #include "RecentProjects.h"
> -
> -#include "Project/Project.h"
>  #include "Settings/Settings.h"
> -#include "Tools/VlmcDebug.h"
>
>  RecentProjects::RecentProjects( Settings* vlmcSettings, QObject *parent )
>      : QObject(parent)
> -    , m_settings( vlmcSettings )
>  {
> -       SettingValue* recentProjects = vlmcSettings->createVar( SettingValue::String, "private/RecentsProjects", "",
> +    m_recentsProjects = vlmcSettings->createVar( SettingValue::List, "private/RecentsProjects", QVariantList(),
>                                                  "", "", SettingValue::Private );
> -
> -       connect( recentProjects, SIGNAL( changed( QVariant ) ), this, SLOT( loadRecentProjects( QVariant ) ) );
> -}
> -
> -void
> -RecentProjects::projectLoaded(const QString& projectName, const QString& projectFile)
> -{
> -    removeFromRecentProjects( projectName );
> -    RecentProject project;
> -    project.name = projectName;
> -    project.filePath = projectFile;
> -    m_recentsProjects.prepend( project );
> -    while ( m_recentsProjects.count() > 15 )
> -        m_recentsProjects.removeLast();
> -
> -    Core::instance()->settings()->setValue( "private/RecentsProjects", flattenProjectList() );
>  }
>
> -const RecentProjects::List&
> -RecentProjects::list() const
> +QVariant
> +RecentProjects::toVariant() 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->get().toList() );
>  }
>
>  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 )
> +    QVariantList l = m_recentsProjects->get().toList();
> +    for ( int i = 0; i < l.count(); ++i )
>      {
> -        if ( (*it).filePath == projectPath )
> -            it = m_recentsProjects.erase( it );
> -        else
> -            ++it;
> +        if ( l[i].toMap()["file"].toString() == projectFile )
> +        {
> +            l.removeAt( i );
> +            --i;
> +        }
>      }
> +    m_recentsProjects->set( l );
>  }
>
>  void
> -RecentProjects::remove( const QString& projectPath )
> +RecentProjects::projectLoaded( const QString& projectName, const QString& projectFile )
>  {
> -    removeFromRecentProjects( projectPath );
> -    Core::instance()->settings()->setValue( "private/RecentsProjects", flattenProjectList() );
> -}
> -
> -void
> -RecentProjects::loadRecentProjects( const QVariant& recentProjects )
> -{
> -    // 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 );
> -    }
> +    QVariantList l = m_recentsProjects->get().toList();
> +    QVariantMap var {
> +        { "name", projectName },
> +        { "file", projectFile }
> +    };
> +    l.removeAll( var );
> +    l.insert( 0, var );
> +    m_recentsProjects->set( l );
>  }
> diff --git a/src/Project/RecentProjects.h b/src/Project/RecentProjects.h
> index eb2c64f..82f5c44 100644
> --- a/src/Project/RecentProjects.h
> +++ b/src/Project/RecentProjects.h
> @@ -26,6 +26,7 @@
>  #include <QObject>
>
>  class   Project;
> +class   SettingValue;
>  class   Settings;
>
>  class RecentProjects : public QObject
> @@ -33,32 +34,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;
> +        SettingValue*   m_recentsProjects;
>
>  };
>
> --
> 1.9.1
>


More information about the Vlmc-devel mailing list