From ec2fa92ee096db72bc48803676ba21e873d4d475 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Date: Tue, 1 Dec 2009 19:08:44 +0100 Subject: [PATCH] delete DetailedModel - it is unused --- src/plugins/projectexplorer/projectmodels.cpp | 481 ------------------ src/plugins/projectexplorer/projectmodels.h | 63 --- 2 files changed, 544 deletions(-) diff --git a/src/plugins/projectexplorer/projectmodels.cpp b/src/plugins/projectexplorer/projectmodels.cpp index b8144112154..dea024776c7 100644 --- a/src/plugins/projectexplorer/projectmodels.cpp +++ b/src/plugins/projectexplorer/projectmodels.cpp @@ -136,487 +136,6 @@ bool sortNodes(Node *n1, Node *n2) } // namespace anon -/*! - \class DetailedModel - - A 1:1 mapping of the internal node tree. - - The detailed model shows the complete project file hierarchy and all containing files. - */ - -DetailedModel::DetailedModel(SessionNode *rootNode, QObject *parent) - : QAbstractItemModel(parent), - m_rootNode(rootNode), - //m_startupProject(0), - m_folderToAddTo(0) -{ - NodesWatcher *watcher = new NodesWatcher(this); - m_rootNode->registerWatcher(watcher); - connect(watcher, SIGNAL(foldersAboutToBeAdded(FolderNode*, const QList<FolderNode*> &)), - this, SLOT(foldersAboutToBeAdded(FolderNode*, const QList<FolderNode*> &))); - connect(watcher, SIGNAL(foldersAdded()), - this, SLOT(foldersAdded())); - connect(watcher, SIGNAL(foldersAboutToBeRemoved(FolderNode*, const QList<FolderNode*> &)), - this, SLOT(foldersAboutToBeRemoved(FolderNode*, const QList<FolderNode*> &))); - connect(watcher, SIGNAL(filesAboutToBeAdded(FolderNode*, const QList<FileNode*> &)), - this, SLOT(filesAboutToBeAdded(FolderNode*, const QList<FileNode*> &))); - connect(watcher, SIGNAL(filesAdded()), - this, SLOT(filesAdded())); - connect(watcher, SIGNAL(filesAboutToBeRemoved(FolderNode*, const QList<FileNode*> &)), - this, SLOT(filesAboutToBeRemoved(FolderNode*, const QList<FileNode*> &))); -} - -QModelIndex DetailedModel::index(int row, int column, const QModelIndex &parent) const -{ - QModelIndex result; - if (!parent.isValid() && row == 0 && column == 0) { - result = createIndex(0, 0, m_rootNode); - } else if (column == 0) { - FolderNode *parentNode = qobject_cast<FolderNode*>(nodeForIndex(parent)); - Q_ASSERT(parentNode); - result = createIndex(row, 0, m_childNodes.value(parentNode).at(row)); - } - return result; -} - -QModelIndex DetailedModel::parent(const QModelIndex &index) const -{ - QModelIndex parentIndex; - - if (Node *node = nodeForIndex(index)) { - if (FolderNode *parentFolderNode = node->parentFolderNode()) { - if (FolderNode *grandParentFolderNode = parentFolderNode->parentFolderNode()) { - Q_ASSERT(m_childNodes.contains(grandParentFolderNode)); - int row = m_childNodes.value(grandParentFolderNode).indexOf(parentFolderNode); - parentIndex = createIndex(row, 0, parentFolderNode); - } else { - parentIndex = createIndex(0, 0, parentFolderNode); - } - } - } - - return parentIndex; -} - -Qt::ItemFlags DetailedModel::flags(const QModelIndex &index) const -{ - Qt::ItemFlags result; - if (index.isValid()) { - result = Qt::ItemIsEnabled | Qt::ItemIsSelectable; - - if (Node *node = nodeForIndex(index)) { - if (node->nodeType() == FileNodeType) - result |= Qt::ItemIsEditable; - } - } - return result; -} - -QVariant DetailedModel::data(const QModelIndex &index, int role) const -{ - QVariant result; - - if (Node *node = nodeForIndex(index)) { - FolderNode *folderNode = qobject_cast<FolderNode*>(node); - switch (role) { - case Qt::DisplayRole: - case Qt::EditRole: { - if (folderNode) - result = folderNode->name(); - else - result = QFileInfo(node->path()).fileName(); //TODO cache that? - break; - } - case Qt::ToolTipRole: { - if (folderNode && (folderNode->nodeType() != ProjectNodeType)) - result = tr("%1 of project %2").arg(folderNode->name()).arg(folderNode->projectNode()->name()); - else - result = node->path(); - break; - } - case Qt::DecorationRole: { - if (folderNode) - result = folderNode->icon(); - else - result = FileIconProvider::instance()->icon(QFileInfo(node->path())); - break; - } - case Qt::FontRole: { - QFont font; - result = font; - break; - } - case ProjectExplorer::Project::FilePathRole: { - result = node->path(); - break; - } - } - } - - return result; -} - -bool DetailedModel::setData(const QModelIndex &index, const QVariant &value, int role) -{ - bool result = false; - - if (Node *node = nodeForIndex(index)) { - FileNode *fileNode = qobject_cast<FileNode*>(node); - if (fileNode && role == Qt::EditRole && !value.toString().isEmpty()) { - ProjectNode *projectNode = node->projectNode(); - QString newPath = QFileInfo(fileNode->path()).dir().absoluteFilePath(value.toString()); - if (!projectNode->renameFile(fileNode->fileType(), fileNode->path(), newPath)) - QMessageBox::warning(0, tr("Could not rename file"), - tr("Renaming file %1 to %2 failed.").arg(fileNode->path()) - .arg(value.toString())); - } - } - - return result; -} - -int DetailedModel::rowCount(const QModelIndex & parent) const -{ - int count = 0; - - if (!parent.isValid()) { // root item - count = 1; - } else { - // we can be sure that internal cache - // has been updated by fetchMore() - FolderNode *folderNode = qobject_cast<FolderNode*>(nodeForIndex(parent)); - if (folderNode && m_childNodes.contains(folderNode)) - count = m_childNodes.value(folderNode).size(); - } - return count; -} - -int DetailedModel::columnCount(const QModelIndex &parent) const -{ - Q_UNUSED(parent) - return 1; -} - -bool DetailedModel::hasChildren(const QModelIndex &parent) const -{ - bool hasChilds = false; - - if (!parent.isValid()) {// root index - hasChilds = true; - } else { - if (FolderNode *folderNode = qobject_cast<FolderNode*>(nodeForIndex(parent))) { - if (m_childNodes.contains(folderNode)) // internal cache - hasChilds = !m_childNodes.value(folderNode).isEmpty(); - else { - if (!folderNode->subFolderNodes().isEmpty() - || !folderNode->fileNodes().isEmpty()) // underlying data - hasChilds = true; - else { - // Make sure add/remove signals are emitted - // even for empty nodes (i.e. where canFetchMore - // returns false) - m_childNodes.insert(folderNode, QList<Node*>()); - } - } - } - } - - return hasChilds; -} - -/*! - Returns true if internal cache has not been built up yet - */ -bool DetailedModel::canFetchMore(const QModelIndex & parent) const -{ - bool canFetch = false; - if (parent.isValid()) { - if (FolderNode *folderNode = qobject_cast<FolderNode*>(nodeForIndex(parent))) { - canFetch = !m_childNodes.contains(folderNode); - } - } - return canFetch; -} - -/*! - Updates internal cache - */ -void DetailedModel::fetchMore(const QModelIndex & parent) -{ - FolderNode *folderNode = qobject_cast<FolderNode*>(nodeForIndex(parent)); - Q_ASSERT(folderNode); - Q_ASSERT(!m_childNodes.contains(folderNode)); - - m_childNodes.insert(folderNode, childNodeList(folderNode)); -} - -void DetailedModel::reset() -{ - // todo:How to implement this correctly????? - m_childNodes.clear(); - QAbstractItemModel::reset(); -} - -void DetailedModel::foldersAboutToBeAdded(FolderNode *parentFolder, - const QList<FolderNode*> &newFolders) -{ - Q_UNUSED(newFolders) - Q_ASSERT(parentFolder); - - if (m_childNodes.contains(parentFolder)) - m_folderToAddTo = parentFolder; -} - -void DetailedModel::foldersAdded() -{ - if (m_folderToAddTo) { - QList<Node*> newChildNodes = childNodeList(m_folderToAddTo); - addToChildNodes(m_folderToAddTo, newChildNodes); - m_folderToAddTo = 0; - } -} - -void DetailedModel::foldersAboutToBeRemoved(FolderNode *parentFolder, - const QList<FolderNode*> &staleFolders) -{ - Q_ASSERT(parentFolder); - - if (m_childNodes.contains(parentFolder)) { - QList<Node*> newChildNodes = m_childNodes.value(parentFolder); - QList<FolderNode*> nodesToRemove = staleFolders; - qSort(nodesToRemove.begin(), nodesToRemove.end(), sortNodes); - - QList<Node*>::iterator newListIter = newChildNodes.begin(); - QList<FolderNode*>::const_iterator toRemoveIter = nodesToRemove.constBegin(); - for (; toRemoveIter != nodesToRemove.constEnd(); ++toRemoveIter) { - while (*newListIter != *toRemoveIter) - ++newListIter; - newListIter = newChildNodes.erase(newListIter); - } - - removeFromChildNodes(parentFolder, newChildNodes); - - // Clear cache for all folders beneath the current folder - foreach (FolderNode *folder, staleFolders) { - foreach (FolderNode *subFolder, recursiveSubFolders(folder)) { - m_childNodes.remove(subFolder); - } - } - } -} - -void DetailedModel::filesAboutToBeAdded(FolderNode *parentFolder, - const QList<FileNode*> &newFiles) -{ - Q_UNUSED(newFiles) - Q_ASSERT(parentFolder); - - if (m_childNodes.contains(parentFolder)) - m_folderToAddTo = parentFolder; -} - -void DetailedModel::filesAdded() -{ - if (m_folderToAddTo) { - QList<Node*> newChildNodes = childNodeList(m_folderToAddTo); - addToChildNodes(m_folderToAddTo, newChildNodes); - m_folderToAddTo = 0; - } -} - -void DetailedModel::filesAboutToBeRemoved(FolderNode *parentFolder, - const QList<FileNode*> &staleFiles) -{ - Q_ASSERT(parentFolder); - - if (m_childNodes.contains(parentFolder)) { - QList<Node*> newChildNodes = m_childNodes.value(parentFolder); - QList<FileNode*> nodesToRemove = staleFiles; - qSort(nodesToRemove.begin(), nodesToRemove.end(), sortNodes); - - QList<Node*>::iterator newListIter = newChildNodes.begin(); - QList<FileNode*>::const_iterator toRemoveIter = nodesToRemove.constBegin(); - for (; toRemoveIter != nodesToRemove.constEnd(); ++toRemoveIter) { - while (*newListIter != *toRemoveIter) - ++newListIter; - newListIter = newChildNodes.erase(newListIter); - } - - removeFromChildNodes(parentFolder, newChildNodes); - } -} - -Node *DetailedModel::nodeForIndex(const QModelIndex &index) const -{ - return (Node*)index.internalPointer(); -} - -/*! - Returns the index corresponding to a node. - */ -QModelIndex DetailedModel::indexForNode(const Node *node) -{ - if (!node) - return QModelIndex(); - - if (FolderNode *parentFolder = node->parentFolderNode()) { - // iterate recursively - QModelIndex parentIndex = indexForNode(parentFolder); - - // update internal cache - if (canFetchMore(parentIndex)) - fetchMore(parentIndex); - Q_ASSERT(m_childNodes.contains(parentFolder)); - - int row = m_childNodes.value(parentFolder).indexOf(const_cast<Node*>(node)); - if (row >= 0) - return index(row, 0, parentIndex); - else - return QModelIndex(); - } else { - // root node - return index(0, 0); - } -} - -QList<Node*> DetailedModel::childNodeList(FolderNode *folderNode) const -{ - QList<FolderNode*> folderNodes = folderNode->subFolderNodes(); - QList<FileNode*> fileNodes = folderNode->fileNodes(); - - QList<Node*> nodes; - foreach (FolderNode *folderNode, folderNodes) - nodes << folderNode; - foreach (FileNode *fileNode, fileNodes) - nodes << fileNode; - - qSort(nodes.begin(), nodes.end(), sortNodes); - - return nodes; -} - -void DetailedModel::addToChildNodes(FolderNode *parentFolder, QList<Node*> newChildNodes) -{ - QList<Node*> childNodes = m_childNodes.value(parentFolder); - QModelIndex parentIndex = indexForNode(parentFolder); - Q_ASSERT(parentIndex.isValid()); - - // position -> nodes, with positions in decreasing order - QList<QPair<int, QList<Node*> > > insertions; - - // add nodes that should be added at the end or in between - int newIndex = newChildNodes.size() - 1; - for (int oldIndex = childNodes.size() - 1; - oldIndex >= 0; --oldIndex, --newIndex) { - QList<Node*> nodesPerIndex; - Node* oldNode = childNodes.at(oldIndex); - while (newChildNodes.at(newIndex) != oldNode) { - nodesPerIndex.append(newChildNodes.at(newIndex)); - --newIndex; - } - if (!nodesPerIndex.isEmpty()) - insertions.append(QPair<int, QList<Node*> >(oldIndex + 1, nodesPerIndex)); - } - { // add nodes that should be added to the beginning - QList<Node*> insertAtStart; - while (newIndex >= 0) { - insertAtStart.append(newChildNodes.at(newIndex--)); - } - if (!insertAtStart.isEmpty()) - insertions.append(QPair<int, QList<Node*> >(0, insertAtStart)); - } - - for (QList<QPair<int, QList<Node*> > >::const_iterator iter = insertions.constBegin(); - iter != insertions.constEnd(); ++iter) { - - const int key = iter->first; - const QList<Node*> nodesToInsert = iter->second; - - beginInsertRows(parentIndex, key, key + nodesToInsert.size() - 1); - - // update internal cache - for (QList<Node*>::const_iterator nodeIterator = nodesToInsert.constBegin(); - nodeIterator != nodesToInsert.constEnd(); ++nodeIterator) - childNodes.insert(key, *nodeIterator); - m_childNodes.insert(parentFolder, childNodes); - - endInsertRows(); - } - - Q_ASSERT(childNodes == newChildNodes); -} - -void DetailedModel::removeFromChildNodes(FolderNode *parentFolder, QList<Node*> newChildNodes) -{ - QList<Node*> childNodes = m_childNodes.value(parentFolder); - QModelIndex parentIndex = indexForNode(parentFolder); - Q_ASSERT(parentIndex.isValid()); - - // position -> nodes, with positions in decreasing order - QList<QPair<int, QList<Node*> > > deletions; - - // add nodes that should be removed at the end or in between - int oldIndex = childNodes.size() - 1; - for (int newIndex = newChildNodes.size() - 1; - newIndex >= 0; --oldIndex, --newIndex) { - QList<Node*> nodesPerIndex; - Node* newNode = newChildNodes.at(newIndex); - while (childNodes.at(oldIndex) != newNode) { - nodesPerIndex.append(childNodes.at(oldIndex)); - --oldIndex; - } - if (!nodesPerIndex.isEmpty()) - deletions.append(QPair<int, QList<Node*> >(oldIndex + 1, nodesPerIndex)); - } - { // add nodes that should be removed to the beginning - QList<Node*> deleteAtStart; - while (oldIndex >= 0) { - deleteAtStart.append(childNodes.at(oldIndex--)); - } - if (!deleteAtStart.isEmpty()) - deletions.append(QPair<int, QList<Node*> >(0, deleteAtStart)); - } - - for (QList<QPair<int, QList<Node*> > >::const_iterator iter = deletions.constBegin(); - iter != deletions.constEnd(); ++iter) { - - const int key = iter->first; - const QList<Node*> nodes = iter->second; - - beginRemoveRows(parentIndex, key, key + nodes.size() - 1); - - // update internal cache - for (int i = nodes.size(); i > 0; --i) - childNodes.removeAt(key); - m_childNodes.insert(parentFolder, childNodes); - - endRemoveRows(); - } - - Q_ASSERT(childNodes == newChildNodes); -} - -QList<FolderNode*> DetailedModel::recursiveSubFolders(FolderNode *parentFolder) -{ - QList<FolderNode*> subFolders; - foreach (FolderNode *subFolder, parentFolder->subFolderNodes()) { - subFolders.append(subFolder); - subFolders != recursiveSubFolders(subFolder); - } - return subFolders; -} - - -/*! - \class FlatModel - - The flat model shows only application/library projects. - - - Shows all application/library projects directly unter the root project - This results in a "flattened" view (max 3 hierachies). - */ - FlatModel::FlatModel(SessionNode *rootNode, QObject *parent) : QAbstractItemModel(parent), m_filterProjects(false), diff --git a/src/plugins/projectexplorer/projectmodels.h b/src/plugins/projectexplorer/projectmodels.h index 32007250ca0..f6e7a05bdd1 100644 --- a/src/plugins/projectexplorer/projectmodels.h +++ b/src/plugins/projectexplorer/projectmodels.h @@ -43,69 +43,6 @@ class SessionNode; namespace Internal { -// A 1:1 mapping of the internal data model -class DetailedModel : public QAbstractItemModel { - Q_OBJECT -public: - DetailedModel(SessionNode *rootNode, QObject *parent); - - // QAbstractItemModel - QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex &index) const; - Qt::ItemFlags flags(const QModelIndex & index) const; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); - - int rowCount(const QModelIndex & parent = QModelIndex()) const; - int columnCount(const QModelIndex & parent = QModelIndex()) const; - bool hasChildren(const QModelIndex & parent = QModelIndex()) const; - - bool canFetchMore(const QModelIndex & parent) const; - void fetchMore(const QModelIndex & parent); - - void reset(); - - void setStartupProject(ProjectNode * /* projectNode */) {} - - Node *nodeForIndex(const QModelIndex &index) const; - QModelIndex indexForNode(const Node *node); - - public slots: - void setProjectFilterEnabled(bool /* filter */) {} - -private slots: - void foldersAboutToBeAdded(FolderNode *parentFolder, - const QList<FolderNode*> &newFolders); - void foldersAdded(); - - void foldersAboutToBeRemoved(FolderNode *parentFolder, - const QList<FolderNode*> &staleFolders); - - void filesAboutToBeAdded(FolderNode *folder, - const QList<FileNode*> &newFiles); - void filesAdded(); - - void filesAboutToBeRemoved(FolderNode *folder, - const QList<FileNode*> &staleFiles); - -private: - QList<Node*> childNodeList(FolderNode *folderNode) const; - - void connectProject(ProjectNode *project); - void addToChildNodes(FolderNode *parentFolder, QList<Node*> newList); - void removeFromChildNodes(FolderNode *parentFolder, QList<Node*> newList); - QList<FolderNode*> recursiveSubFolders(FolderNode *parentFolder); - - SessionNode *m_rootNode; - mutable QHash<FolderNode*, QList<Node*> > m_childNodes; - FolderNode *m_folderToAddTo; - - friend class DetailedModelManager; -}; - - -// displays "flattened" view without pri files, subdirs pro files & virtual folders -// This view is optimized to be used in the edit mode sidebar class FlatModel : public QAbstractItemModel { Q_OBJECT public: -- GitLab