#ifndef APPLISTMODEL_H #define APPLISTMODEL_H #include <QtCore/QAbstractListModel> #include <QtCore/QMap> #include <QtCore/QVariant> #include <deque> #include <list> #include "appmodel.h" class AppListModel : public QAbstractListModel { Q_OBJECT public: AppListModel(QObject* parent = 0); ~AppListModel(); void push_back(uint64_t id, const QString& name); void removeElement(uint64_t id); AppModel* getApp(uint64_t id); void clear(); QVariant data(const QModelIndex &i, int role = Qt::DisplayRole) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); void setConnectable(uint64_t id, bool value); void setConnected(uint64_t id, bool value); void setLaunchable(uint64_t id, bool value); void setLaunched(uint64_t id, bool value); void setEditable(uint64_t id, bool value); void setName(uint64_t id, const QString& name); void setAttribute(uint64_t id, const QString& key, const QString& value); void addCommand(uint64_t id, const QString& key, const QMap<QString, uint64_t>& arguments); void removeCommand(uint64_t id, const QString& key); void clearCommands(uint64_t id); void clearLog(uint64_t id); private: typedef QMap<uint64_t, AppModel*> Map; typedef QMap<uint64_t, uint64_t> IndexHelper; typedef std::deque<Map::iterator> Index; typedef std::pair<uint64_t, AppModel*> Pair; typedef std::list<Pair> List; Index index; IndexHelper helper; Map map; List toInsert; public slots: void logMessage(uint64_t id, const QString& msg); }; #endif // APPLISTMODEL_H