forked from qt-creator/qt-creator
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:
@@ -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 ®);
|
explicit RegisterItem(const Register ®);
|
||||||
@@ -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 ® = registerItem->m_reg;
|
Register ® = 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;
|
||||||
|
Reference in New Issue
Block a user