X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitracemodel.cpp;h=5860cf9530e4d66310d6497db52454b7f9f085fc;hb=ed40bc699e44f810d27c7e50d396f7749c8cc9c2;hp=39459ce1c7d804aff44d0a64a2bef7903ba8a405;hpb=c52d18a3319956aea59dfa6648c56ddd1df9414f;p=apitrace diff --git a/gui/apitracemodel.cpp b/gui/apitracemodel.cpp index 39459ce..5860cf9 100644 --- a/gui/apitracemodel.cpp +++ b/gui/apitracemodel.cpp @@ -42,23 +42,31 @@ QVariant ApiTraceModel::data(const QModelIndex &index, int role) const const QString stateText = tr("State info available."); if (itm->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(itm); - if (call->state().isEmpty()) + if (!call->hasState()) return QString::fromLatin1("%1) %2") - .arg(call->index) - .arg(call->name); + .arg(call->index()) + .arg(call->name()); else return QString::fromLatin1("%1) %2
%3") - .arg(call->index) - .arg(call->name) + .arg(call->index()) + .arg(call->name()) .arg(stateText); } else { ApiTraceFrame *frame = static_cast(itm); - QString text = frame->staticText().text(); - if (frame->state().isEmpty()) - return QString::fromLatin1("%1").arg(text); + QString text = QObject::tr("%1) Frame ") + .arg(frame->number); + int binaryDataSize = frame->binaryDataSize() / 1024; + if (!frame->hasState()) + return QObject::tr( + "%1 (binary data size = %2kB)") + .arg(text) + .arg(binaryDataSize); else - return QString::fromLatin1("%1
%2") + return QObject::tr( + "%1 (binary data size = %2kB)" + "
%3") .arg(text) + .arg(binaryDataSize) .arg(stateText); } } @@ -98,7 +106,7 @@ QVariant ApiTraceModel::headerData(int section, Qt::Orientation orientation, QModelIndex ApiTraceModel::index(int row, int column, const QModelIndex &parent) const { - if (parent.isValid() && parent.column() != 0) + if ((parent.isValid() && parent.column() != 0) || column != 0) return QModelIndex(); ApiTraceEvent *event = item(parent); @@ -108,7 +116,7 @@ QModelIndex ApiTraceModel::index(int row, int column, return QModelIndex(); } ApiTraceFrame *frame = static_cast(event); - ApiTraceCall *call = frame->calls.value(row); + ApiTraceCall *call = frame->call(row); if (call) return createIndex(row, column, call); else @@ -129,7 +137,7 @@ bool ApiTraceModel::hasChildren(const QModelIndex &parent) const ApiTraceEvent *event = item(parent); if (event && event->type() == ApiTraceEvent::Frame) { ApiTraceFrame *frame = static_cast(event); - return !frame->calls.isEmpty(); + return !frame->isEmpty(); } else return false; } else { @@ -145,9 +153,9 @@ QModelIndex ApiTraceModel::parent(const QModelIndex &index) const ApiTraceEvent *event = item(index); if (event && event->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(event); - Q_ASSERT(call->parentFrame); - return createIndex(call->parentFrame->number, - 0, call->parentFrame); + Q_ASSERT(call->parentFrame()); + return createIndex(call->parentFrame()->number, + 0, call->parentFrame()); } return QModelIndex(); } @@ -163,7 +171,7 @@ int ApiTraceModel::rowCount(const QModelIndex &parent) const ApiTraceFrame *frame = static_cast(event); if (frame) - return frame->calls.count(); + return frame->numChildren(); return 0; } @@ -200,10 +208,16 @@ void ApiTraceModel::setApiTrace(ApiTrace *trace) if (m_trace) disconnect(m_trace); m_trace = trace; + connect(m_trace, SIGNAL(invalidated()), + this, SLOT(invalidateFrames())); connect(m_trace, SIGNAL(framesInvalidated()), this, SLOT(invalidateFrames())); - connect(m_trace, SIGNAL(framesAdded(int, int)), - this, SLOT(appendFrames(int, int))); + connect(m_trace, SIGNAL(beginAddingFrames(int, int)), + this, SLOT(beginAddingFrames(int, int))); + connect(m_trace, SIGNAL(endAddingFrames()), + this, SLOT(endAddingFrames())); + connect(m_trace, SIGNAL(changed(ApiTraceCall*)), + this, SLOT(callChanged(ApiTraceCall*))); } const ApiTrace * ApiTraceModel::apiTrace() const @@ -217,11 +231,10 @@ void ApiTraceModel::invalidateFrames() endResetModel(); } -void ApiTraceModel::appendFrames(int oldCount, int numAdded) +void ApiTraceModel::beginAddingFrames(int oldCount, int numAdded) { beginInsertRows(QModelIndex(), oldCount, oldCount + numAdded - 1); - endInsertRows(); } ApiTraceEvent * ApiTraceModel::item(const QModelIndex &index) const @@ -238,8 +251,8 @@ void ApiTraceModel::stateSetOnEvent(ApiTraceEvent *event) if (event->type() == ApiTraceEvent::Call) { ApiTraceCall *call = static_cast(event); - ApiTraceFrame *frame = call->parentFrame; - int row = frame->calls.indexOf(call); + ApiTraceFrame *frame = call->parentFrame(); + int row = frame->callIndex(call); QModelIndex index = createIndex(row, 0, call); emit dataChanged(index, index); } else if (event->type() == ApiTraceEvent::Frame) { @@ -253,21 +266,51 @@ void ApiTraceModel::stateSetOnEvent(ApiTraceEvent *event) QModelIndex ApiTraceModel::callIndex(int callNum) const { - ApiTraceCall *call = m_trace->callAt(callNum); + ApiTraceCall *call = m_trace->callWithIndex(callNum); + return indexForCall(call); +} +QModelIndex ApiTraceModel::indexForCall(ApiTraceCall *call) const +{ if (!call) { return QModelIndex(); } - ApiTraceFrame *frame = call->parentFrame; + ApiTraceFrame *frame = call->parentFrame(); Q_ASSERT(frame); - int row = frame->calls.indexOf(call); + int row = frame->callIndex(call); if (row < 0) { - qDebug() << "Couldn't find call num "<index()<<" inside parent!"; return QModelIndex(); } return createIndex(row, 0, call); } +void ApiTraceModel::callChanged(ApiTraceCall *call) +{ + ApiTrace *trace = call->parentFrame()->parentTrace(); + +#if 0 + qDebug()<<"Call changed = "<edited(); + qDebug()<<"\ttrace edited = "<edited(); + qDebug()<<"\ttrace file = "<fileName(); + qDebug()<<"\ttrace needs saving = "<needsSaving(); +#endif + + Q_ASSERT(trace); + if (trace->needsSaving()) + trace->save(); + + ApiTraceFrame *frame = call->parentFrame(); + int row = frame->callIndex(call); + QModelIndex index = createIndex(row, 0, call); + emit dataChanged(index, index); +} + +void ApiTraceModel::endAddingFrames() +{ + endInsertRows(); +} + #include "apitracemodel.moc"