Debugger: Use TypedTreeItems in RegisterHandler

Saves a couple of static_casts on the user side.

Change-Id: Ib8f70046ae40539813c01e3ff7d790bf7a170bee
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2016-06-24 08:38:42 +02:00
parent 0cfd569038
commit 0ec8fdda5c

View File

@@ -30,6 +30,8 @@
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
using namespace Utils;
namespace Debugger { namespace Debugger {
namespace Internal { namespace Internal {
@@ -286,9 +288,10 @@ void RegisterValue::shiftOneDigit(uint digit, RegisterFormat format)
// //
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
class RegisterItem;
class RegisterSubItem; class RegisterSubItem;
class RegisterEditItem : public Utils::TreeItem class RegisterEditItem : public TypedTreeItem<TreeItem, RegisterSubItem>
{ {
public: public:
RegisterEditItem(int pos, RegisterKind subKind, int subSize, RegisterFormat format) RegisterEditItem(int pos, RegisterKind subKind, int subSize, RegisterFormat format)
@@ -306,7 +309,7 @@ public:
}; };
class RegisterSubItem : public Utils::TreeItem class RegisterSubItem : public TypedTreeItem<RegisterEditItem, RegisterItem>
{ {
public: public:
RegisterSubItem(RegisterKind subKind, int subSize, int count, RegisterFormat format) RegisterSubItem(RegisterKind subKind, int subSize, int count, RegisterFormat format)
@@ -333,7 +336,7 @@ public:
bool m_changed; bool m_changed;
}; };
class RegisterItem : public Utils::TreeItem class RegisterItem : public TypedTreeItem<RegisterSubItem>
{ {
public: public:
explicit RegisterItem(const Register &reg); explicit RegisterItem(const Register &reg);
@@ -460,10 +463,8 @@ QVariant RegisterSubItem::data(int column, int role) const
case RegisterChangedRole: case RegisterChangedRole:
return m_changed; return m_changed;
case RegisterFormatRole: { case RegisterFormatRole:
RegisterItem *registerItem = static_cast<RegisterItem *>(parent()); return int(parent()->m_format);
return int(registerItem->m_format);
}
case RegisterAsAddressRole: case RegisterAsAddressRole:
return 0; return 0;
@@ -474,8 +475,7 @@ QVariant RegisterSubItem::data(int column, int role) const
return subTypeName(m_subKind, m_subSize, m_subFormat); return subTypeName(m_subKind, m_subSize, m_subFormat);
case RegisterValueColumn: { case RegisterValueColumn: {
QTC_ASSERT(parent(), return QVariant()); QTC_ASSERT(parent(), return QVariant());
RegisterItem *registerItem = static_cast<RegisterItem *>(parent()); RegisterValue value = parent()->m_reg.value;
RegisterValue value = registerItem->m_reg.value;
QString ba; QString ba;
for (int i = 0; i != m_count; ++i) { for (int i = 0; i != m_count; ++i) {
int tab = 5 * (i + 1) * m_subSize; int tab = 5 * (i + 1) * m_subSize;
@@ -582,14 +582,13 @@ QVariant RegisterEditItem::data(int column, int role) const
return QString("[%1]").arg(m_index); return QString("[%1]").arg(m_index);
} }
case RegisterValueColumn: { case RegisterValueColumn: {
RegisterItem *registerItem = static_cast<RegisterItem *>(parent()->parent()); RegisterValue value = parent()->parent()->m_reg.value;
RegisterValue value = registerItem->m_reg.value;
return value.subValue(m_subSize, m_index) return value.subValue(m_subSize, m_index)
.toString(m_subKind, m_subSize, m_subFormat, role == Qt::EditRole); .toString(m_subKind, m_subSize, m_subFormat, role == Qt::EditRole);
} }
} }
case Qt::ToolTipRole: { case Qt::ToolTipRole: {
RegisterItem *registerItem = static_cast<RegisterItem *>(parent()->parent()); RegisterItem *registerItem = parent()->parent();
return RegisterHandler::tr("Edit bits %1...%2 of register %3") return RegisterHandler::tr("Edit bits %1...%2 of register %3")
.arg(m_index * 8).arg(m_index * 8 + 7).arg(registerItem->m_reg.name); .arg(m_index * 8).arg(m_index * 8 + 7).arg(registerItem->m_reg.name);
} }
@@ -604,7 +603,7 @@ bool RegisterEditItem::setData(int column, const QVariant &value, int role)
if (column == RegisterValueColumn && role == Qt::EditRole) { if (column == RegisterValueColumn && role == Qt::EditRole) {
QTC_ASSERT(parent(), return false); QTC_ASSERT(parent(), return false);
QTC_ASSERT(parent()->parent(), return false); QTC_ASSERT(parent()->parent(), return false);
RegisterItem *registerItem = static_cast<RegisterItem *>(parent()->parent()); RegisterItem *registerItem = parent()->parent();
Register &reg = registerItem->m_reg; Register &reg = registerItem->m_reg;
RegisterValue vv; RegisterValue vv;
vv.fromString(value.toString(), m_subFormat); vv.fromString(value.toString(), m_subFormat);
@@ -618,8 +617,7 @@ bool RegisterEditItem::setData(int column, const QVariant &value, int role)
Qt::ItemFlags RegisterEditItem::flags(int column) const Qt::ItemFlags RegisterEditItem::flags(int column) const
{ {
QTC_ASSERT(parent(), return Qt::ItemFlags()); QTC_ASSERT(parent(), return Qt::ItemFlags());
RegisterSubItem *registerSubItem = static_cast<RegisterSubItem *>(parent()); Qt::ItemFlags f = parent()->flags(column);
Qt::ItemFlags f = registerSubItem->flags(column);
if (column == RegisterValueColumn) if (column == RegisterValueColumn)
f |= Qt::ItemIsEditable; f |= Qt::ItemIsEditable;
return f; return f;