Edit Comment from DisassemblyContextMenu

This commit is contained in:
Florian Märkl 2017-12-01 11:46:13 +01:00
parent 82e2ddf6e6
commit 61549f401e
5 changed files with 43 additions and 3 deletions

View File

@ -332,7 +332,7 @@ void CutterCore::renameFlag(QString old_name, QString new_name)
cmd("fr " + old_name + " " + new_name); cmd("fr " + old_name + " " + new_name);
} }
void CutterCore::setComment(RVA addr, QString cmt) void CutterCore::setComment(RVA addr, const QString &cmt)
{ {
cmd("CCu base64:" + cmt.toLocal8Bit().toBase64() + " @ " + QString::number(addr)); cmd("CCu base64:" + cmt.toLocal8Bit().toBase64() + " @ " + QString::number(addr));
emit commentsChanged(); emit commentsChanged();

View File

@ -204,8 +204,10 @@ public:
QStringList cmdList(const QString &str) { auto l = cmd(str).split("\n"); l.removeAll(""); return l; } QStringList cmdList(const QString &str) { auto l = cmd(str).split("\n"); l.removeAll(""); return l; }
void renameFunction(QString prev_name, QString new_name); void renameFunction(QString prev_name, QString new_name);
void renameFlag(QString old_name, QString new_name); void renameFlag(QString old_name, QString new_name);
void setComment(RVA addr, QString cmt);
void setComment(RVA addr, const QString &cmt);
void delComment(ut64 addr); void delComment(ut64 addr);
void setImmediateBase(const QString &r2BaseName, RVA offset = RVA_INVALID); void setImmediateBase(const QString &r2BaseName, RVA offset = RVA_INVALID);
QMap<QString, QList<QList<QString>>> getNestedComments(); QMap<QString, QList<QList<QString>>> getNestedComments();
void setOptions(QString key); void setOptions(QString key);

View File

@ -25,3 +25,8 @@ QString CommentsDialog::getComment()
QString ret = ui->lineEdit->text(); QString ret = ui->lineEdit->text();
return ret; return ret;
} }
void CommentsDialog::setComment(const QString &comment)
{
ui->lineEdit->setText(comment);
}

View File

@ -18,6 +18,7 @@ public:
~CommentsDialog(); ~CommentsDialog();
QString getComment(); QString getComment();
void setComment(const QString &comment);
private slots: private slots:
void on_buttonBox_accepted(); void on_buttonBox_accepted();

View File

@ -122,6 +122,17 @@ void DisassemblyContextMenu::aboutToShowSlot()
auto keys = instObject.keys(); auto keys = instObject.keys();
bool immBase = keys.contains("val") || keys.contains("ptr"); bool immBase = keys.contains("val") || keys.contains("ptr");
setBaseMenuAction->setVisible(immBase); setBaseMenuAction->setVisible(immBase);
QJsonObject disasObject = Core()->cmdj("pdj 1 @ " + QString::number(offset)).array().first().toObject();
QString comment = disasObject["comment"].toString();
if (comment.isNull() || QByteArray::fromBase64(comment.toUtf8()).isEmpty())
{
actionAddComment.setText(tr("Add Comment"));
}
else
{
actionAddComment.setText(tr("Edit Comment"));
}
} }
QKeySequence DisassemblyContextMenu::getCommentSequence() const QKeySequence DisassemblyContextMenu::getCommentSequence() const
@ -151,13 +162,34 @@ QKeySequence DisassemblyContextMenu::getDisplayOptionsSequence() const
void DisassemblyContextMenu::on_actionAddComment_triggered() void DisassemblyContextMenu::on_actionAddComment_triggered()
{ {
QJsonObject disasObject = Core()->cmdj("pdj 1 @ " + QString::number(offset)).array().first().toObject();
QString oldComment = QString::fromUtf8(QByteArray::fromBase64(disasObject["comment"].toString().toUtf8()));
CommentsDialog *c = new CommentsDialog(this); CommentsDialog *c = new CommentsDialog(this);
if (oldComment.isNull() || QByteArray::fromBase64(oldComment.toUtf8()).isEmpty())
{
c->setWindowTitle(tr("Add Comment at %1").arg(RAddressString(offset)));
}
else
{
c->setWindowTitle(tr("Edit Comment at %1").arg(RAddressString(offset)));
}
c->setComment(oldComment);
if (c->exec()) if (c->exec())
{ {
QString comment = c->getComment(); QString comment = c->getComment();
if (comment.isEmpty())
{
Core()->delComment(offset);
}
else
{
Core()->setComment(offset, comment); Core()->setComment(offset, comment);
} }
} }
}
void DisassemblyContextMenu::on_actionAddFlag_triggered() void DisassemblyContextMenu::on_actionAddFlag_triggered()
{ {