diff --git a/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp b/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp index 928e47f42be..0e7eee87f7e 100644 --- a/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp +++ b/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp @@ -279,6 +279,84 @@ QVariant ProjectFilesModel::headerData(int section, Qt::Orientation orientation, return QVariant(); } +// --- ProjectHeaderPathModel -------------------------------------------------------------------- + +class ProjectHeaderPathsModel : public QAbstractListModel +{ + Q_OBJECT +public: + ProjectHeaderPathsModel(QObject *parent); + void configure(const ProjectPartHeaderPaths &paths); + void clear(); + + enum Columns { TypeColumn, PathColumn, ColumnCount }; + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + +private: + ProjectPartHeaderPaths m_paths; +}; + +ProjectHeaderPathsModel::ProjectHeaderPathsModel(QObject *parent) : QAbstractListModel(parent) +{ +} + +void ProjectHeaderPathsModel::configure(const ProjectPartHeaderPaths &paths) +{ + emit layoutAboutToBeChanged(); + m_paths = paths; + emit layoutChanged(); +} + +void ProjectHeaderPathsModel::clear() +{ + emit layoutAboutToBeChanged(); + m_paths.clear(); + emit layoutChanged(); +} + +int ProjectHeaderPathsModel::rowCount(const QModelIndex &/*parent*/) const +{ + return m_paths.size(); +} + +int ProjectHeaderPathsModel::columnCount(const QModelIndex &/*parent*/) const +{ + return ProjectFilesModel::ColumnCount; +} + +QVariant ProjectHeaderPathsModel::data(const QModelIndex &index, int role) const +{ + if (role == Qt::DisplayRole) { + const int row = index.row(); + const int column = index.column(); + if (column == TypeColumn) { + return CMI::Utils::toString(m_paths.at(row).type); + } else if (column == PathColumn) { + return m_paths.at(row).path; + } + } + return QVariant(); +} + +QVariant ProjectHeaderPathsModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { + switch (section) { + case TypeColumn: + return QLatin1String("Type"); + case PathColumn: + return QLatin1String("Path"); + default: + return QVariant(); + } + } + return QVariant(); +} + // --- KeyValueModel ------------------------------------------------------------------------------ class KeyValueModel : public QAbstractListModel @@ -1254,6 +1332,7 @@ CppCodeModelInspectorDialog::CppCodeModelInspectorDialog(QWidget *parent) , m_proxyProjectPartsModel(new QSortFilterProxyModel(this)) , m_partGenericInfoModel(new KeyValueModel(this)) , m_projectFilesModel(new ProjectFilesModel(this)) + , m_projectHeaderPathsModel(new ProjectHeaderPathsModel(this)) , m_workingCopyView(new FilterableView(this)) , m_workingCopyModel(new WorkingCopyModel(this)) , m_proxyWorkingCopyModel(new QSortFilterProxyModel(this)) @@ -1281,6 +1360,7 @@ CppCodeModelInspectorDialog::CppCodeModelInspectorDialog(QWidget *parent) m_projectPartsView->setModel(m_proxyProjectPartsModel); m_ui->partGeneralView->setModel(m_partGenericInfoModel); m_ui->projectFilesView->setModel(m_projectFilesModel); + m_ui->projectHeaderPathsView->setModel(m_projectHeaderPathsModel); m_proxyWorkingCopyModel->setSourceModel(m_workingCopyModel); m_proxyWorkingCopyModel->setFilterKeyColumn(WorkingCopyModel::FilePathColumn); @@ -1665,6 +1745,7 @@ void CppCodeModelInspectorDialog::clearProjectPartData() { m_partGenericInfoModel->clear(); m_projectFilesModel->clear(); + m_projectHeaderPathsModel->clear(); m_ui->projectPartTab->setTabText(ProjectPartFilesTab, partTabName(ProjectPartFilesTab)); @@ -1672,7 +1753,6 @@ void CppCodeModelInspectorDialog::clearProjectPartData() m_ui->partProjectDefinesEdit->clear(); m_ui->projectPartTab->setTabText(ProjectPartDefinesTab, partTabName(ProjectPartDefinesTab)); - m_ui->partHeaderPathsEdit->clear(); m_ui->projectPartTab->setTabText(ProjectPartHeaderPathsTab, partTabName(ProjectPartHeaderPathsTab)); @@ -1730,7 +1810,7 @@ void CppCodeModelInspectorDialog::updateProjectPartData(const ProjectPart::Ptr & partTabName(ProjectPartDefinesTab, numberOfDefines)); // Header Paths - m_ui->partHeaderPathsEdit->setPlainText(CMI::Utils::pathListToString(part->headerPaths)); + m_projectHeaderPathsModel->configure(part->headerPaths); m_ui->projectPartTab->setTabText(ProjectPartHeaderPathsTab, partTabName(ProjectPartHeaderPathsTab, part->headerPaths.size())); diff --git a/src/plugins/cppeditor/cppcodemodelinspectordialog.h b/src/plugins/cppeditor/cppcodemodelinspectordialog.h index 120af98d428..01d24ea0b88 100644 --- a/src/plugins/cppeditor/cppcodemodelinspectordialog.h +++ b/src/plugins/cppeditor/cppcodemodelinspectordialog.h @@ -50,6 +50,7 @@ class KeyValueModel; class MacrosModel; class ProjectPartsModel; class ProjectFilesModel; +class ProjectHeaderPathsModel; class SnapshotModel; class SymbolsModel; class TokensModel; @@ -112,6 +113,7 @@ private: QSortFilterProxyModel *m_proxyProjectPartsModel; KeyValueModel *m_partGenericInfoModel; ProjectFilesModel *m_projectFilesModel; + ProjectHeaderPathsModel *m_projectHeaderPathsModel; // Working Copy FilterableView *m_workingCopyView; diff --git a/src/plugins/cppeditor/cppcodemodelinspectordialog.ui b/src/plugins/cppeditor/cppcodemodelinspectordialog.ui index 1e28854dfac..9eb8bdb1ba0 100644 --- a/src/plugins/cppeditor/cppcodemodelinspectordialog.ui +++ b/src/plugins/cppeditor/cppcodemodelinspectordialog.ui @@ -261,11 +261,7 @@ - - - true - - + diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp index 3121ab2cf77..62b8693be1e 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp @@ -87,6 +87,19 @@ QString Utils::toString(CPlusPlus::Document::DiagnosticMessage::Level level) return QString(); } +QString Utils::toString(ProjectPartHeaderPath::Type type) +{ +#define CASE_LANGUAGEVERSION(x) case ProjectPartHeaderPath::x: return QLatin1String(#x) + switch (type) { + CASE_LANGUAGEVERSION(InvalidPath); + CASE_LANGUAGEVERSION(IncludePath); + CASE_LANGUAGEVERSION(FrameworkPath); + // no default to get a compiler warning if anything is added + } +#undef CASE_LANGUAGEVERSION + return QString(); +} + QString Utils::toString(ProjectPart::LanguageVersion languageVersion) { #define CASE_LANGUAGEVERSION(x) case ProjectPart::x: return QLatin1String(#x) diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.h b/src/plugins/cpptools/cppcodemodelinspectordumper.h index c548b92bc4b..d281722790a 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.h +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.h @@ -46,6 +46,7 @@ struct CPPTOOLS_EXPORT Utils static QString toString(const QDateTime &dateTime); static QString toString(CPlusPlus::Document::CheckMode checkMode); static QString toString(CPlusPlus::Document::DiagnosticMessage::Level level); + static QString toString(ProjectPartHeaderPath::Type type); static QString toString(CppTools::ProjectPart::LanguageVersion languageVersion); static QString toString(CppTools::ProjectPart::LanguageExtensions languageExtension); static QString toString(CppTools::ProjectPart::QtVersion qtVersion);