diff options
author | hjk <hjk@qt.io> | 2019-11-15 18:42:11 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-11-18 08:33:26 +0000 |
commit | 3c6c61d1c82d9de71c2c191e8ee8d28e3ac021ab (patch) | |
tree | 749da47c5183c5e818e79e1cd3d13af8ad8a69c4 /src/plugins/classview | |
parent | 3ecf3d95753bbfa6affe32ef84cf0727bdbca9be (diff) |
ClassView: Dissolve the internal 'Utils' class
It's regularly getting in my way, and it's rather a namespace anyway.
Also, move the functions that are only used once closer to their
place of use.
Change-Id: I97951aae1b69c04f391afbdd1b491a8a9173a977
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/classview')
-rw-r--r-- | src/plugins/classview/classviewmanager.cpp | 2 | ||||
-rw-r--r-- | src/plugins/classview/classviewnavigationwidget.cpp | 4 | ||||
-rw-r--r-- | src/plugins/classview/classviewparser.cpp | 13 | ||||
-rw-r--r-- | src/plugins/classview/classviewparsertreeitem.cpp | 26 | ||||
-rw-r--r-- | src/plugins/classview/classviewsymbolinformation.cpp | 45 | ||||
-rw-r--r-- | src/plugins/classview/classviewtreeitemmodel.cpp | 59 | ||||
-rw-r--r-- | src/plugins/classview/classviewutils.cpp | 192 | ||||
-rw-r--r-- | src/plugins/classview/classviewutils.h | 24 |
8 files changed, 138 insertions, 227 deletions
diff --git a/src/plugins/classview/classviewmanager.cpp b/src/plugins/classview/classviewmanager.cpp index 06ab90783e1..1910cf419c7 100644 --- a/src/plugins/classview/classviewmanager.cpp +++ b/src/plugins/classview/classviewmanager.cpp @@ -437,7 +437,7 @@ void Manager::gotoLocation(const QString &fileName, int line, int column) void Manager::gotoLocations(const QList<QVariant> &list) { - QSet<SymbolLocation> locations = Utils::roleToLocations(list); + QSet<SymbolLocation> locations = Internal::roleToLocations(list); if (locations.size() == 0) return; diff --git a/src/plugins/classview/classviewnavigationwidget.cpp b/src/plugins/classview/classviewnavigationwidget.cpp index b2fd94427af..49b21162384 100644 --- a/src/plugins/classview/classviewnavigationwidget.cpp +++ b/src/plugins/classview/classviewnavigationwidget.cpp @@ -315,8 +315,8 @@ void NavigationWidget::fetchExpandedItems(QStandardItem *item, const QStandardIt QStandardItem *itemChild = item->child(itemIndex); const QStandardItem *targetChild = target->child(targetIndex); - const SymbolInformation &itemInf = Utils::symbolInformationFromItem(itemChild); - const SymbolInformation &targetInf = Utils::symbolInformationFromItem(targetChild); + const SymbolInformation &itemInf = Internal::symbolInformationFromItem(itemChild); + const SymbolInformation &targetInf = Internal::symbolInformationFromItem(targetChild); if (itemInf < targetInf) { ++itemIndex; diff --git a/src/plugins/classview/classviewparser.cpp b/src/plugins/classview/classviewparser.cpp index 07892d04d5d..c62bf93a8c4 100644 --- a/src/plugins/classview/classviewparser.cpp +++ b/src/plugins/classview/classviewparser.cpp @@ -58,6 +58,7 @@ enum { debug = false }; using namespace ProjectExplorer; +using namespace Utils; namespace ClassView { namespace Internal { @@ -258,7 +259,7 @@ ParserTreeItem::ConstPtr Parser::findItemByRoot(const QStandardItem *item, bool while (uiList.count() > 0) { cur = uiList.last(); uiList.removeLast(); - const SymbolInformation &inf = Utils::symbolInformationFromItem(cur); + const SymbolInformation &inf = Internal::symbolInformationFromItem(cur); internal = internal->child(inf); if (internal.isNull()) break; @@ -586,7 +587,7 @@ void Parser::clearCache() void Parser::setFileList(const QStringList &fileList) { - d->fileList = ::Utils::toSet(fileList); + d->fileList = Utils::toSet(fileList); } /*! @@ -632,12 +633,12 @@ void Parser::resetData(const CPlusPlus::Snapshot &snapshot) d->docLocker.unlock(); // recalculate file list - ::Utils::FilePathList fileList; + FilePathList fileList; // check all projects for (const Project *prj : SessionManager::projects()) fileList += prj->files(Project::SourceFiles); - setFileList(::Utils::transform(fileList, &::Utils::FilePath::toString)); + setFileList(Utils::transform(fileList, &FilePath::toString)); emit resetDataDone(); } @@ -719,7 +720,7 @@ QStringList Parser::addProjectTree(const ParserTreeItem::Ptr &item, const Projec if (cit != d->cachedPrjFileLists.constEnd()) { fileList = cit.value(); } else { - fileList = ::Utils::transform(project->files(Project::SourceFiles), &::Utils::FilePath::toString); + fileList = Utils::transform(project->files(Project::SourceFiles), &FilePath::toString); d->cachedPrjFileLists[projectPath] = fileList; } if (fileList.count() > 0) { @@ -744,7 +745,7 @@ QStringList Parser::getAllFiles(const Project *project) if (cit != d->cachedPrjFileLists.constEnd()) { fileList = cit.value(); } else { - fileList = ::Utils::transform(project->files(Project::SourceFiles), &::Utils::FilePath::toString); + fileList = Utils::transform(project->files(Project::SourceFiles), &FilePath::toString); d->cachedPrjFileLists[nodePath] = fileList; } return fileList; diff --git a/src/plugins/classview/classviewparsertreeitem.cpp b/src/plugins/classview/classviewparsertreeitem.cpp index e80dc3e25b2..102abf23815 100644 --- a/src/plugins/classview/classviewparsertreeitem.cpp +++ b/src/plugins/classview/classviewparsertreeitem.cpp @@ -29,6 +29,8 @@ #include "classviewconstants.h" #include "classviewutils.h" +#include <utils/algorithm.h> + #include <QHash> #include <QPair> #include <QIcon> @@ -277,6 +279,22 @@ void ParserTreeItem::add(const ParserTreeItem::ConstPtr &target) } /*! + Converts internal location container to QVariant compatible. + \a locations specifies a set of symbol locations. + Returns a list of variant locations that can be added to the data of an + item. +*/ + +static QList<QVariant> locationsToRole(const QSet<SymbolLocation> &locations) +{ + QList<QVariant> locationsVar; + for (const SymbolLocation &loc : locations) + locationsVar.append(QVariant::fromValue(loc)); + + return locationsVar; +} + +/*! Appends this item to the QStandardIten item \a item. */ @@ -304,7 +322,10 @@ void ParserTreeItem::convertTo(QStandardItem *item) const ParserTreeItem::Ptr ptr = cur.value(); auto add = new QStandardItem; - Utils::setSymbolInformationToItem(inf, add); + add->setData(inf.name(), Constants::SymbolNameRole); + add->setData(inf.type(), Constants::SymbolTypeRole); + add->setData(inf.iconType(), Constants::IconTypeRole); + if (!ptr.isNull()) { // icon add->setIcon(ptr->icon()); @@ -314,8 +335,7 @@ void ParserTreeItem::convertTo(QStandardItem *item) const add->setFlags(add->flags() | Qt::ItemIsDragEnabled); // locations - add->setData(Utils::locationsToRole(ptr->symbolLocations()), - Constants::SymbolLocationsRole); + add->setData(locationsToRole(ptr->symbolLocations()), Constants::SymbolLocationsRole); } item->appendRow(add); ++cur; diff --git a/src/plugins/classview/classviewsymbolinformation.cpp b/src/plugins/classview/classviewsymbolinformation.cpp index ec7028b24b7..59d5e24aab7 100644 --- a/src/plugins/classview/classviewsymbolinformation.cpp +++ b/src/plugins/classview/classviewsymbolinformation.cpp @@ -24,8 +24,12 @@ ****************************************************************************/ #include "classviewsymbolinformation.h" + +#include "classviewconstants.h" #include "classviewutils.h" +#include <utils/utilsicons.h> + #include <QPair> #include <QHash> @@ -61,7 +65,46 @@ SymbolInformation::SymbolInformation(const QString &valueName, const QString &va int SymbolInformation::iconTypeSortOrder() const { - return Utils::iconTypeSortOrder(m_iconType); + namespace Icons = Utils::CodeModelIcon; + constexpr int IconSortOrder[] = { + Icons::Namespace, + Icons::Enum, + Icons::Class, + Icons::FuncPublic, + Icons::FuncProtected, + Icons::FuncPrivate, + Icons::FuncPublicStatic, + Icons::FuncProtectedStatic, + Icons::FuncPrivateStatic, + Icons::Signal, + Icons::SlotPublic, + Icons::SlotProtected, + Icons::SlotPrivate, + Icons::VarPublic, + Icons::VarProtected, + Icons::VarPrivate, + Icons::VarPublicStatic, + Icons::VarProtectedStatic, + Icons::VarPrivateStatic, + Icons::Enumerator, + Icons::Keyword, + Icons::Macro, + Icons::Unknown + }; + + static QHash<int, int> sortOrder; + + // initialization + if (sortOrder.isEmpty()) { + for (int i : IconSortOrder) + sortOrder.insert(i, sortOrder.count()); + } + + // if it is missing - return the same value + if (!sortOrder.contains(m_iconType)) + return m_iconType; + + return sortOrder[m_iconType]; } bool SymbolInformation::operator<(const SymbolInformation &other) const diff --git a/src/plugins/classview/classviewtreeitemmodel.cpp b/src/plugins/classview/classviewtreeitemmodel.cpp index 4f8d361ced2..f4f32fc7b98 100644 --- a/src/plugins/classview/classviewtreeitemmodel.cpp +++ b/src/plugins/classview/classviewtreeitemmodel.cpp @@ -34,6 +34,59 @@ namespace ClassView { namespace Internal { +/*! + Moves \a item to \a target (sorted). +*/ + +static void moveItemToTarget(QStandardItem *item, const QStandardItem *target) +{ + if (!item || !target) + return; + + int itemIndex = 0; + int targetIndex = 0; + int itemRows = item->rowCount(); + int targetRows = target->rowCount(); + + while (itemIndex < itemRows && targetIndex < targetRows) { + QStandardItem *itemChild = item->child(itemIndex); + const QStandardItem *targetChild = target->child(targetIndex); + + const SymbolInformation &itemInf = Internal::symbolInformationFromItem(itemChild); + const SymbolInformation &targetInf = Internal::symbolInformationFromItem(targetChild); + + if (itemInf < targetInf) { + item->removeRow(itemIndex); + --itemRows; + } else if (itemInf == targetInf) { + moveItemToTarget(itemChild, targetChild); + ++itemIndex; + ++targetIndex; + } else { + item->insertRow(itemIndex, targetChild->clone()); + moveItemToTarget(item->child(itemIndex), targetChild); + ++itemIndex; + ++itemRows; + ++targetIndex; + } + } + + // append + while (targetIndex < targetRows) { + item->appendRow(target->child(targetIndex)->clone()); + moveItemToTarget(item->child(itemIndex), target->child(targetIndex)); + ++itemIndex; + ++itemRows; + ++targetIndex; + } + + // remove end of item + while (itemIndex < itemRows) { + item->removeRow(itemIndex); + --itemRows; + } +} + ///////////////////////////////// TreeItemModel ////////////////////////////////// /*! @@ -66,7 +119,7 @@ QVariant TreeItemModel::data(const QModelIndex &index, int role) const break; case Qt::ToolTipRole: case Qt::DisplayRole: { - const SymbolInformation &inf = Utils::symbolInformationFromItem(itemFromIndex(index)); + const SymbolInformation &inf = Internal::symbolInformationFromItem(itemFromIndex(index)); if (inf.name() == inf.type() || inf.iconType() < 0) return inf.name(); @@ -125,7 +178,7 @@ QMimeData *TreeItemModel::mimeData(const QModelIndexList &indexes) const auto mimeData = new ::Utils::DropMimeData; mimeData->setOverrideFileDropAction(Qt::CopyAction); foreach (const QModelIndex &index, indexes) { - const QSet<SymbolLocation> locations = Utils::roleToLocations( + const QSet<SymbolLocation> locations = Internal::roleToLocations( data(index, Constants::SymbolLocationsRole).toList()); if (locations.isEmpty()) continue; @@ -147,7 +200,7 @@ void TreeItemModel::moveRootToTarget(const QStandardItem *target) { emit layoutAboutToBeChanged(); - Utils::moveItemToTarget(invisibleRootItem(), target); + moveItemToTarget(invisibleRootItem(), target); emit layoutChanged(); } diff --git a/src/plugins/classview/classviewutils.cpp b/src/plugins/classview/classviewutils.cpp index 7b4e0d5fbc7..cebea9a6f28 100644 --- a/src/plugins/classview/classviewutils.cpp +++ b/src/plugins/classview/classviewutils.cpp @@ -27,69 +27,12 @@ #include "classviewconstants.h" #include "classviewsymbolinformation.h" -// needed for the correct sorting order -#include <cplusplus/Icons.h> - #include <QStandardItem> #include <QDebug> namespace ClassView { -namespace Constants { - -/*! - \class Utils - \brief The Utils class provides some common utilities. -*/ - -//! Default icon sort order -const int IconSortOrder[] = { - Utils::CodeModelIcon::Namespace, - Utils::CodeModelIcon::Enum, - Utils::CodeModelIcon::Class, - Utils::CodeModelIcon::FuncPublic, - Utils::CodeModelIcon::FuncProtected, - Utils::CodeModelIcon::FuncPrivate, - Utils::CodeModelIcon::FuncPublicStatic, - Utils::CodeModelIcon::FuncProtectedStatic, - Utils::CodeModelIcon::FuncPrivateStatic, - Utils::CodeModelIcon::Signal, - Utils::CodeModelIcon::SlotPublic, - Utils::CodeModelIcon::SlotProtected, - Utils::CodeModelIcon::SlotPrivate, - Utils::CodeModelIcon::VarPublic, - Utils::CodeModelIcon::VarProtected, - Utils::CodeModelIcon::VarPrivate, - Utils::CodeModelIcon::VarPublicStatic, - Utils::CodeModelIcon::VarProtectedStatic, - Utils::CodeModelIcon::VarPrivateStatic, - Utils::CodeModelIcon::Enumerator, - Utils::CodeModelIcon::Keyword, - Utils::CodeModelIcon::Macro, - Utils::CodeModelIcon::Unknown -}; - -} // namespace Constants - namespace Internal { -Utils::Utils() = default; - -/*! - Converts internal location container to QVariant compatible. - \a locations specifies a set of symbol locations. - Returns a list of variant locations that can be added to the data of an - item. -*/ - -QList<QVariant> Utils::locationsToRole(const QSet<SymbolLocation> &locations) -{ - QList<QVariant> locationsVar; - foreach (const SymbolLocation &loc, locations) - locationsVar.append(QVariant::fromValue(loc)); - - return locationsVar; -} - /*! Converts QVariant location container to internal. \a locationsVar contains a list of variant locations from the data of an @@ -97,7 +40,7 @@ QList<QVariant> Utils::locationsToRole(const QSet<SymbolLocation> &locations) Returns a set of symbol locations. */ -QSet<SymbolLocation> Utils::roleToLocations(const QList<QVariant> &locationsVar) +QSet<SymbolLocation> roleToLocations(const QList<QVariant> &locationsVar) { QSet<SymbolLocation> locations; foreach (const QVariant &loc, locationsVar) { @@ -108,50 +51,12 @@ QSet<SymbolLocation> Utils::roleToLocations(const QList<QVariant> &locationsVar) return locations; } -/*! - Returns sort order value for the \a icon. -*/ - -int Utils::iconTypeSortOrder(int icon) -{ - static QHash<int, int> sortOrder; - - // initialization - if (sortOrder.isEmpty()) { - for (int i : Constants::IconSortOrder) - sortOrder.insert(i, sortOrder.count()); - } - - // if it is missing - return the same value - if (!sortOrder.contains(icon)) - return icon; - - return sortOrder[icon]; -} - -/*! - Sets symbol information specified by \a information to \a item. - \a information provides the name, type, and icon for the item. - Returns the filled item. -*/ - -QStandardItem *Utils::setSymbolInformationToItem(const SymbolInformation &information, - QStandardItem *item) -{ - Q_ASSERT(item); - - item->setData(information.name(), Constants::SymbolNameRole); - item->setData(information.type(), Constants::SymbolTypeRole); - item->setData(information.iconType(), Constants::IconTypeRole); - - return item; -} /*! Returns symbol information for \a item. */ -SymbolInformation Utils::symbolInformationFromItem(const QStandardItem *item) +SymbolInformation symbolInformationFromItem(const QStandardItem *item) { Q_ASSERT(item); @@ -173,98 +78,5 @@ SymbolInformation Utils::symbolInformationFromItem(const QStandardItem *item) return SymbolInformation(name, type, iconType); } -/*! - Updates \a item to \a target, so that it is sorted and can be fetched. -*/ - -void Utils::fetchItemToTarget(QStandardItem *item, const QStandardItem *target) -{ - if (!item || !target) - return; - - int itemIndex = 0; - int targetIndex = 0; - int itemRows = item->rowCount(); - int targetRows = target->rowCount(); - - while (itemIndex < itemRows && targetIndex < targetRows) { - const QStandardItem *itemChild = item->child(itemIndex); - const QStandardItem *targetChild = target->child(targetIndex); - - const SymbolInformation &itemInf = symbolInformationFromItem(itemChild); - const SymbolInformation &targetInf = symbolInformationFromItem(targetChild); - - if (itemInf < targetInf) { - ++itemIndex; - } else if (itemInf == targetInf) { - ++itemIndex; - ++targetIndex; - } else { - item->insertRow(itemIndex, targetChild->clone()); - ++itemIndex; - ++itemRows; - ++targetIndex; - } - } - - // append - while (targetIndex < targetRows) { - item->appendRow(target->child(targetIndex)->clone()); - ++targetIndex; - } -} - -/*! - Moves \a item to \a target (sorted). -*/ -void Utils::moveItemToTarget(QStandardItem *item, const QStandardItem *target) -{ - if (!item || !target) - return; - - int itemIndex = 0; - int targetIndex = 0; - int itemRows = item->rowCount(); - int targetRows = target->rowCount(); - - while (itemIndex < itemRows && targetIndex < targetRows) { - QStandardItem *itemChild = item->child(itemIndex); - const QStandardItem *targetChild = target->child(targetIndex); - - const SymbolInformation &itemInf = Utils::symbolInformationFromItem(itemChild); - const SymbolInformation &targetInf = Utils::symbolInformationFromItem(targetChild); - - if (itemInf < targetInf) { - item->removeRow(itemIndex); - --itemRows; - } else if (itemInf == targetInf) { - moveItemToTarget(itemChild, targetChild); - ++itemIndex; - ++targetIndex; - } else { - item->insertRow(itemIndex, targetChild->clone()); - moveItemToTarget(item->child(itemIndex), targetChild); - ++itemIndex; - ++itemRows; - ++targetIndex; - } - } - - // append - while (targetIndex < targetRows) { - item->appendRow(target->child(targetIndex)->clone()); - moveItemToTarget(item->child(itemIndex), target->child(targetIndex)); - ++itemIndex; - ++itemRows; - ++targetIndex; - } - - // remove end of item - while (itemIndex < itemRows) { - item->removeRow(itemIndex); - --itemRows; - } -} - } // namespace Internal } // namespace ClassView diff --git a/src/plugins/classview/classviewutils.h b/src/plugins/classview/classviewutils.h index 9a731e90e0e..f6acb7c6243 100644 --- a/src/plugins/classview/classviewutils.h +++ b/src/plugins/classview/classviewutils.h @@ -27,6 +27,7 @@ #include "classviewsymbollocation.h" #include "classviewsymbolinformation.h" + #include <QVariant> #include <QList> #include <QSet> @@ -36,27 +37,8 @@ QT_FORWARD_DECLARE_CLASS(QStandardItem) namespace ClassView { namespace Internal { -class Utils -{ - //! Private constructor - Utils(); -public: - - static QList<QVariant> locationsToRole(const QSet<SymbolLocation> &locations); - - static QSet<SymbolLocation> roleToLocations(const QList<QVariant> &locations); - - static int iconTypeSortOrder(int iconType); - - static SymbolInformation symbolInformationFromItem(const QStandardItem *item); - - static QStandardItem *setSymbolInformationToItem(const SymbolInformation &information, - QStandardItem *item); - - static void fetchItemToTarget(QStandardItem *item, const QStandardItem *target); - - static void moveItemToTarget(QStandardItem *item, const QStandardItem *target); -}; +QSet<SymbolLocation> roleToLocations(const QList<QVariant> &locations); +SymbolInformation symbolInformationFromItem(const QStandardItem *item); } // namespace Internal } // namespace ClassView |