summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@theqtcompany.com>2015-09-10 10:57:15 +0200
committerChristian Stenger <christian.stenger@theqtcompany.com>2015-10-08 13:35:19 +0300
commit475d6b3af29a1e84baf23021aa7a68e8c0b49c13 (patch)
tree68580c8a7c9d79b484783ceef944ae26c49d76d0
parent65d3a27db70e5122641b37c5e8649122c6937a94 (diff)
downloadqt-creator-475d6b3af29a1e84baf23021aa7a68e8c0b49c13.tar.gz
Move data handling almost from model to item
Part of preparing to re-use QC's TreeModel/TreeItem for TestTreeModel/TestTreeItem. Change-Id: I3752d800d836a5cd9067cacfcd181d93ec957095 Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
-rw-r--r--plugins/autotest/testtreeitem.cpp85
-rw-r--r--plugins/autotest/testtreeitem.h14
-rw-r--r--plugins/autotest/testtreeitemdelegate.cpp1
-rw-r--r--plugins/autotest/testtreemodel.cpp101
-rw-r--r--plugins/autotest/testtreemodel.h9
5 files changed, 108 insertions, 102 deletions
diff --git a/plugins/autotest/testtreeitem.cpp b/plugins/autotest/testtreeitem.cpp
index 78d91c4490..bea7766287 100644
--- a/plugins/autotest/testtreeitem.cpp
+++ b/plugins/autotest/testtreeitem.cpp
@@ -17,10 +17,16 @@
**
****************************************************************************/
+#include "autotestconstants.h"
#include "testtreeitem.h"
#include <utils/qtcassert.h>
+#include <QIcon>
+#include <QVariant>
+
+#include <texteditor/texteditor.h>
+
namespace Autotest {
namespace Internal {
@@ -78,6 +84,85 @@ void TestTreeItem::appendChild(TestTreeItem *child)
m_children.append(child);
}
+static QIcon testTreeIcon(TestTreeItem::Type type)
+{
+ static QIcon icons[] = {
+ QIcon(),
+ QIcon(QLatin1String(":/images/class.png")),
+ QIcon(QLatin1String(":/images/func.png")),
+ QIcon(QLatin1String(":/images/data.png"))
+ };
+ if (type >= sizeof(icons))
+ return icons[2];
+ return icons[type];
+}
+
+QVariant TestTreeItem::data(int /*column*/, int role) const
+{
+ switch (role) {
+ case Qt::DisplayRole:
+ if (m_type == ROOT && childCount() == 0)
+ return QString(m_name + QObject::tr(" (none)"));
+ else if (m_name.isEmpty())
+ return QObject::tr(Constants::UNNAMED_QUICKTESTS);
+ else
+ return m_name;
+ case Qt::ToolTipRole:
+ if (m_type == TEST_CLASS && m_name.isEmpty()) {
+ return QObject::tr("<p>Give all test cases a name to ensure correct behavior "
+ "when running test cases and to be able to select them.</p>");
+ }
+ return m_filePath;
+ case Qt::DecorationRole:
+ return testTreeIcon(m_type);
+ case Qt::CheckStateRole:
+ switch (m_type) {
+ case ROOT:
+ case TEST_DATAFUNCTION:
+ case TEST_SPECIALFUNCTION:
+ return QVariant();
+ case TEST_CLASS:
+ return m_name.isEmpty() ? QVariant() : checked();
+ case TEST_FUNCTION:
+ if (m_parent && m_parent->name().isEmpty())
+ return QVariant();
+ return checked();
+ default:
+ return checked();
+ }
+ case LinkRole: {
+ QVariant itemLink;
+ itemLink.setValue(TextEditor::TextEditorWidget::Link(m_filePath, m_line, m_column));
+ return itemLink;
+ }
+ case ItalicRole:
+ switch (m_type) {
+ case TEST_DATAFUNCTION:
+ case TEST_SPECIALFUNCTION:
+ return true;
+ case TEST_CLASS:
+ return m_name.isEmpty();
+ case TEST_FUNCTION:
+ return m_parent ? m_parent->name().isEmpty() : false;
+ default:
+ return false;
+ }
+ case TypeRole:
+ return m_type;
+ }
+ return QVariant();
+}
+
+bool TestTreeItem::setData(int /*column*/, const QVariant &data, int role)
+{
+ if (role == Qt::CheckStateRole) {
+ Qt::CheckState old = checked();
+ setChecked((Qt::CheckState)data.toInt());
+ return checked() != old;
+ }
+ return false;
+}
+
int TestTreeItem::row() const
{
if (m_parent)
diff --git a/plugins/autotest/testtreeitem.h b/plugins/autotest/testtreeitem.h
index 79bb7e6c18..8a442e7f84 100644
--- a/plugins/autotest/testtreeitem.h
+++ b/plugins/autotest/testtreeitem.h
@@ -24,6 +24,18 @@
#include <QString>
#include <QMetaType>
+QT_BEGIN_NAMESPACE
+class QVariant;
+QT_END_NAMESPACE
+
+namespace {
+ enum ItemRole {
+ LinkRole = Qt::UserRole + 2, // can be removed if AnnotationRole comes back
+ ItalicRole, // used only inside the delegate
+ TypeRole
+ };
+}
+
namespace Autotest {
namespace Internal {
@@ -48,6 +60,8 @@ public:
TestTreeItem *child(int row) const;
TestTreeItem *parent() const;
void appendChild(TestTreeItem *child);
+ QVariant data(int column, int role) const;
+ bool setData(int column, const QVariant &data, int role);
int row() const;
int childCount() const;
void removeChildren();
diff --git a/plugins/autotest/testtreeitemdelegate.cpp b/plugins/autotest/testtreeitemdelegate.cpp
index 1e5952c7a0..7068c06472 100644
--- a/plugins/autotest/testtreeitemdelegate.cpp
+++ b/plugins/autotest/testtreeitemdelegate.cpp
@@ -17,6 +17,7 @@
**
****************************************************************************/
+#include "testtreeitem.h"
#include "testtreeitemdelegate.h"
#include "testtreemodel.h"
diff --git a/plugins/autotest/testtreemodel.cpp b/plugins/autotest/testtreemodel.cpp
index ccc7616df4..e6ff3a2b74 100644
--- a/plugins/autotest/testtreemodel.cpp
+++ b/plugins/autotest/testtreemodel.cpp
@@ -33,8 +33,6 @@
#include <utils/qtcassert.h>
-#include <QIcon>
-
namespace Autotest {
namespace Internal {
@@ -176,19 +174,6 @@ int TestTreeModel::columnCount(const QModelIndex &) const
return 1;
}
-static QIcon testTreeIcon(TestTreeItem::Type type)
-{
- static QIcon icons[] = {
- QIcon(),
- QIcon(QLatin1String(":/images/class.png")),
- QIcon(QLatin1String(":/images/func.png")),
- QIcon(QLatin1String(":/images/data.png"))
- };
- if (type >= sizeof(icons) / sizeof(icons[0]))
- return icons[2];
- return icons[type];
-}
-
QVariant TestTreeModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
@@ -198,73 +183,7 @@ QVariant TestTreeModel::data(const QModelIndex &index, int role) const
if (!item)
return QVariant();
- if (role == Qt::DisplayRole) {
- if ((item == m_autoTestRootItem && m_autoTestRootItem->childCount() == 0)
- || (item == m_quickTestRootItem && m_quickTestRootItem->childCount() == 0)) {
- return QString(item->name() + tr(" (none)"));
- } else {
- if (item->name().isEmpty() && item->type() == TestTreeItem::TEST_CLASS)
- return tr(Constants::UNNAMED_QUICKTESTS);
- return item->name();
- }
-
- return QVariant(); // TODO ?
- }
- switch(role) {
- case Qt::ToolTipRole:
- if (item->type() == TestTreeItem::TEST_CLASS && item->name().isEmpty())
- return tr("<p>Give all test cases a name to ensure correct behavior "
- "when running test cases and to be able to select them.</p>");
- return item->filePath();
- case Qt::DecorationRole:
- return testTreeIcon(item->type());
- case Qt::CheckStateRole:
- switch (item->type()) {
- case TestTreeItem::ROOT:
- case TestTreeItem::TEST_DATATAG:
- case TestTreeItem::TEST_DATAFUNCTION:
- case TestTreeItem::TEST_SPECIALFUNCTION:
- return QVariant();
- case TestTreeItem::TEST_CLASS:
- if (item->name().isEmpty())
- return QVariant();
- else
- return item->checked();
- case TestTreeItem::TEST_FUNCTION:
- if (TestTreeItem *parent = item->parent())
- return parent->name().isEmpty() ? QVariant() : item->checked();
- else
- return item->checked();
- default:
- return item->checked();
- }
- case LinkRole: {
- QVariant itemLink;
- TextEditor::TextEditorWidget::Link link(item->filePath(), item->line(), item->column());
- itemLink.setValue(link);
- return itemLink;
- }
- case ItalicRole:
- switch (item->type()) {
- case TestTreeItem::TEST_DATAFUNCTION:
- case TestTreeItem::TEST_SPECIALFUNCTION:
- return true;
- case TestTreeItem::TEST_CLASS:
- return item->name().isEmpty();
- case TestTreeItem::TEST_FUNCTION:
- if (TestTreeItem *parent = item->parent())
- return parent->name().isEmpty();
- else
- return false;
- default:
- return false;
- }
- case TypeRole:
- return item->type();
- }
-
- // TODO ?
- return QVariant();
+ return item->data(index.column(), role);
}
bool TestTreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
@@ -272,27 +191,23 @@ bool TestTreeModel::setData(const QModelIndex &index, const QVariant &value, int
if (!index.isValid())
return false;
- if (role == Qt::CheckStateRole) {
- TestTreeItem *item = static_cast<TestTreeItem *>(index.internalPointer());
- Qt::CheckState old = item->checked();
- item->setChecked((Qt::CheckState)value.toInt());
- if (item->checked() != old) {
- switch(item->type()) {
+ TestTreeItem *item = static_cast<TestTreeItem *>(index.internalPointer());
+ if (item && item->setData(index.column(), value, role)) {
+ emit dataChanged(index, index);
+ if (role == Qt::CheckStateRole) {
+ switch (item->type()) {
case TestTreeItem::TEST_CLASS:
- emit dataChanged(index, index);
- if (item->childCount() > 0) {
+ if (item->childCount() > 0)
emit dataChanged(index.child(0, 0), index.child(item->childCount() - 1, 0));
- }
break;
case TestTreeItem::TEST_FUNCTION:
- emit dataChanged(index, index);
emit dataChanged(index.parent(), index.parent());
break;
default: // avoid warning regarding unhandled enum member
break;
}
- return true;
}
+ return true;
}
return false;
}
diff --git a/plugins/autotest/testtreemodel.h b/plugins/autotest/testtreemodel.h
index 7a7deaeb13..7bcbe5e8b1 100644
--- a/plugins/autotest/testtreemodel.h
+++ b/plugins/autotest/testtreemodel.h
@@ -27,15 +27,6 @@
#include <QAbstractItemModel>
#include <QSortFilterProxyModel>
-namespace {
- enum ItemRole {
-// AnnotationRole = Qt::UserRole + 1,
- LinkRole = Qt::UserRole + 2, // can be removed if AnnotationRole comes back
- ItalicRole, // used only inside the delegate
- TypeRole
- };
-}
-
namespace Autotest {
namespace Internal {