From 6ecb833dbf4c4930c8354dcce7967ad44c16c217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 28 Oct 2013 20:55:12 +0100 Subject: Fix problem with instance list not using the instance folder path --- logic/lists/InstanceList.cpp | 16 ++++++---- logic/lists/InstanceList.h | 69 +++++++++++++++++++++++++------------------- 2 files changed, 51 insertions(+), 34 deletions(-) (limited to 'logic') diff --git a/logic/lists/InstanceList.cpp b/logic/lists/InstanceList.cpp index 9740d5a5..08985a19 100644 --- a/logic/lists/InstanceList.cpp +++ b/logic/lists/InstanceList.cpp @@ -34,7 +34,7 @@ const static int GROUP_FILE_FORMAT_VERSION = 1; InstanceList::InstanceList(const QString &instDir, QObject *parent) - : QAbstractListModel(parent), m_instDir("instances") + : QAbstractListModel(parent), m_instDir(instDir) { } @@ -196,8 +196,8 @@ void InstanceList::loadGroupList(QMap &groupMap) if (error.error != QJsonParseError::NoError) { QLOG_ERROR() << QString("Failed to parse instance group file: %1 at offset %2") - .arg(error.errorString(), QString::number(error.offset)) - .toUtf8(); + .arg(error.errorString(), QString::number(error.offset)) + .toUtf8(); return; } @@ -269,7 +269,8 @@ InstanceList::InstListError InstanceList::loadList() m_instances.clear(); QDir dir(m_instDir); - QDirIterator iter(dir); + QDirIterator iter(m_instDir, QDir::Dirs | QDir::NoDot | QDir::NoDotDot | QDir::Readable, + QDirIterator::FollowSymlinks); while (iter.hasNext()) { QString subDir = iter.next(); @@ -340,7 +341,12 @@ void InstanceList::clear() endResetModel(); emit dataIsInvalid(); } -; + +void InstanceList::on_InstFolderChanged(const Setting &setting, QVariant value) +{ + m_instDir = value.toString(); + loadList(); +} /// Add an instance. Triggers notifications, returns the new index int InstanceList::add(InstancePtr t) diff --git a/logic/lists/InstanceList.h b/logic/lists/InstanceList.h index 501edeb1..3cde6bf5 100644 --- a/logic/lists/InstanceList.h +++ b/logic/lists/InstanceList.h @@ -3,7 +3,7 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software @@ -29,19 +29,19 @@ class InstanceList : public QAbstractListModel { Q_OBJECT private: - void loadGroupList(QMap & groupList); + void loadGroupList(QMap &groupList); void saveGroupList(); - + public: explicit InstanceList(const QString &instDir, QObject *parent = 0); virtual ~InstanceList(); - + public: - QModelIndex index ( int row, int column = 0, const QModelIndex& parent = QModelIndex() ) const; - int rowCount ( const QModelIndex& parent = QModelIndex() ) const; - QVariant data ( const QModelIndex& index, int role ) const; - Qt::ItemFlags flags ( const QModelIndex& index ) const; - + QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + Qt::ItemFlags flags(const QModelIndex &index) const; + enum AdditionalRoles { InstancePointerRole = 0x34B1CB48 ///< Return pointer to real instance @@ -56,58 +56,69 @@ public: NoError = 0, UnknownError }; - - QString instDir() const { return m_instDir; } - + + QString instDir() const + { + return m_instDir; + } + /*! * \brief Loads the instance list. Triggers notifications. */ InstListError loadList(); - + /*! * \brief Get the instance at index */ InstancePtr at(int i) const { return m_instances.at(i); - }; - + } + ; + /*! * \brief Get the count of loaded instances */ int count() const { return m_instances.count(); - }; - + } + ; + /// Clear all instances. Triggers notifications. void clear(); - + /// Add an instance. Triggers notifications, returns the new index int add(InstancePtr t); - + /// Get an instance by ID - InstancePtr getInstanceById (QString id); + InstancePtr getInstanceById(QString id); signals: void dataIsInvalid(); - -private slots: - void propertiesChanged(BaseInstance * inst); - void instanceNuked(BaseInstance * inst); + +public +slots: + void on_InstFolderChanged(const Setting & setting, QVariant value); + +private +slots: + void propertiesChanged(BaseInstance *inst); + void instanceNuked(BaseInstance *inst); void groupChanged(); + private: - int getInstIndex(BaseInstance * inst); + int getInstIndex(BaseInstance *inst); + protected: QString m_instDir; - QList< InstancePtr > m_instances; + QList m_instances; }; class InstanceProxyModel : public KCategorizedSortFilterProxyModel { public: - explicit InstanceProxyModel ( QObject *parent = 0 ); + explicit InstanceProxyModel(QObject *parent = 0); protected: - virtual bool subSortLessThan ( const QModelIndex& left, const QModelIndex& right ) const; + virtual bool subSortLessThan(const QModelIndex &left, const QModelIndex &right) const; }; - -- cgit v1.2.3