aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/classview
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-11-15 18:42:11 +0100
committerhjk <hjk@qt.io>2019-11-18 08:33:26 +0000
commit3c6c61d1c82d9de71c2c191e8ee8d28e3ac021ab (patch)
tree749da47c5183c5e818e79e1cd3d13af8ad8a69c4 /src/plugins/classview
parent3ecf3d95753bbfa6affe32ef84cf0727bdbca9be (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.cpp2
-rw-r--r--src/plugins/classview/classviewnavigationwidget.cpp4
-rw-r--r--src/plugins/classview/classviewparser.cpp13
-rw-r--r--src/plugins/classview/classviewparsertreeitem.cpp26
-rw-r--r--src/plugins/classview/classviewsymbolinformation.cpp45
-rw-r--r--src/plugins/classview/classviewtreeitemmodel.cpp59
-rw-r--r--src/plugins/classview/classviewutils.cpp192
-rw-r--r--src/plugins/classview/classviewutils.h24
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