forked from qt-creator/qt-creator
		
	Debugger: Add incremental API for modules.
And use it from CDB's module load/unload callbacks instead of re-setting all modules. Some cleanup. Acked-by: hjk
This commit is contained in:
		@@ -56,9 +56,7 @@ class Debugger::Internal::ModulesModel : public QAbstractItemModel
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    ModulesModel(ModulesHandler *parent)
 | 
			
		||||
      : QAbstractItemModel(parent)
 | 
			
		||||
    {}
 | 
			
		||||
    explicit ModulesModel(ModulesHandler *parent);
 | 
			
		||||
 | 
			
		||||
    // QAbstractItemModel
 | 
			
		||||
    int columnCount(const QModelIndex &parent) const
 | 
			
		||||
@@ -72,13 +70,27 @@ public:
 | 
			
		||||
    QVariant data(const QModelIndex &index, int role) const;
 | 
			
		||||
    bool setData(const QModelIndex &index, const QVariant &value, int role);
 | 
			
		||||
 | 
			
		||||
    void clearModel() { if (!m_modules.isEmpty()) { m_modules.clear(); update(); } }
 | 
			
		||||
    void update() { reset(); }
 | 
			
		||||
    void clearModel();
 | 
			
		||||
    void addModule(const Module &m);
 | 
			
		||||
    void removeModule(const QString &moduleName);
 | 
			
		||||
    void setModules(const QList<Module> &m);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    const QList<Module> &modules() const { return m_modules; }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    int indexOfModule(const QString &name) const;
 | 
			
		||||
 | 
			
		||||
    const QVariant m_yes;
 | 
			
		||||
    const QVariant m_no;
 | 
			
		||||
    QList<Module> m_modules;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
ModulesModel::ModulesModel(ModulesHandler *parent)  :
 | 
			
		||||
    QAbstractItemModel(parent),
 | 
			
		||||
    m_yes(tr("yes")), m_no(tr("no"))
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QVariant ModulesModel::headerData(int section,
 | 
			
		||||
    Qt::Orientation orientation, int role) const
 | 
			
		||||
{
 | 
			
		||||
@@ -117,7 +129,7 @@ QVariant ModulesModel::data(const QModelIndex &index, int role) const
 | 
			
		||||
            break;
 | 
			
		||||
        case 2:
 | 
			
		||||
            if (role == Qt::DisplayRole)
 | 
			
		||||
                return module.symbolsRead ? "yes" : "no";
 | 
			
		||||
                return module.symbolsRead ? m_yes : m_no;
 | 
			
		||||
            break;
 | 
			
		||||
        case 3:
 | 
			
		||||
            if (role == Qt::DisplayRole)
 | 
			
		||||
@@ -136,6 +148,45 @@ bool ModulesModel::setData(const QModelIndex &index, const QVariant &value, int
 | 
			
		||||
    return QAbstractItemModel::setData(index, value, role);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ModulesModel::addModule(const Module &m)
 | 
			
		||||
{
 | 
			
		||||
    beginInsertRows(QModelIndex(), m_modules.size(), m_modules.size());
 | 
			
		||||
    m_modules.push_back(m);
 | 
			
		||||
    endInsertRows();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ModulesModel::setModules(const QList<Module> &m)
 | 
			
		||||
{
 | 
			
		||||
    m_modules = m;
 | 
			
		||||
    reset();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ModulesModel::clearModel()
 | 
			
		||||
{
 | 
			
		||||
    if (!m_modules.isEmpty()) {
 | 
			
		||||
        m_modules.clear();
 | 
			
		||||
        reset();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ModulesModel::indexOfModule(const QString &name) const
 | 
			
		||||
{
 | 
			
		||||
    // Recent modules are more likely to be unloaded first.
 | 
			
		||||
    for (int i = m_modules.size() - 1; i >= 0; i--)
 | 
			
		||||
        if (m_modules.at(i).moduleName == name)
 | 
			
		||||
            return i;
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ModulesModel::removeModule(const QString &moduleName)
 | 
			
		||||
{
 | 
			
		||||
    const int index = indexOfModule(moduleName);
 | 
			
		||||
    QTC_ASSERT(index != -1, return);
 | 
			
		||||
 | 
			
		||||
    beginRemoveRows(QModelIndex(), index, index);
 | 
			
		||||
    m_modules.removeAt(index);
 | 
			
		||||
    endRemoveRows();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
@@ -160,16 +211,24 @@ void ModulesHandler::removeAll()
 | 
			
		||||
    m_model->clearModel();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ModulesHandler::addModule(const Module &module)
 | 
			
		||||
{
 | 
			
		||||
    m_model->addModule(module);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ModulesHandler::removeModule(const QString &moduleName)
 | 
			
		||||
{
 | 
			
		||||
    m_model->removeModule(moduleName);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ModulesHandler::setModules(const QList<Module> &modules)
 | 
			
		||||
{
 | 
			
		||||
    m_model->m_modules = modules;
 | 
			
		||||
    m_model->update();
 | 
			
		||||
    m_model->setModules(modules);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QList<Module> ModulesHandler::modules() const
 | 
			
		||||
{
 | 
			
		||||
    return m_model->m_modules;
 | 
			
		||||
    return m_model->modules();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#include "moduleshandler.moc"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user