summaryrefslogtreecommitdiff
path: root/src/plugins/bineditor
diff options
context:
space:
mode:
authorcon <qtc-committer@nokia.com>2010-07-06 15:34:50 +0200
committercon <qtc-committer@nokia.com>2010-07-06 15:34:50 +0200
commit1a2a4f6387e890d6564eac5644bb26bfe6985d2c (patch)
tree1bbbc92c4f458ca878489d2e84cbc6fa8839b504 /src/plugins/bineditor
parent7feed7318b3ca52d56cb6eb8f11233f32bdcae09 (diff)
parent15047f8816716af0794da4164daa3e007175a78a (diff)
downloadqt-creator-1a2a4f6387e890d6564eac5644bb26bfe6985d2c.tar.gz
Merge remote branch 'origin/2.0'
Conflicts: share/qtcreator/gdbmacros/dumper.py src/libs/qmljs/qmljs-lib.pri src/plugins/fakevim/fakevimhandler.cpp
Diffstat (limited to 'src/plugins/bineditor')
-rw-r--r--src/plugins/bineditor/bineditor.cpp86
-rw-r--r--src/plugins/bineditor/bineditor.h3
2 files changed, 82 insertions, 7 deletions
diff --git a/src/plugins/bineditor/bineditor.cpp b/src/plugins/bineditor/bineditor.cpp
index 3e98ee0ad4..0a6dbcfbb2 100644
--- a/src/plugins/bineditor/bineditor.cpp
+++ b/src/plugins/bineditor/bineditor.cpp
@@ -40,10 +40,12 @@
#include <QtGui/QAction>
#include <QtGui/QClipboard>
#include <QtGui/QFontMetrics>
+#include <QtGui/QHelpEvent>
#include <QtGui/QMenu>
#include <QtGui/QMessageBox>
#include <QtGui/QPainter>
#include <QtGui/QScrollBar>
+#include <QtGui/QToolTip>
#include <QtGui/QWheelEvent>
using namespace BINEditor;
@@ -1030,7 +1032,64 @@ bool BinEditor::event(QEvent *e) {
break;
default:;
}
+ } else if (e->type() == QEvent::ToolTip) {
+ bool hide = true;
+ int selStart = selectionStart();
+ int selEnd = selectionEnd();
+ int byteCount = selEnd - selStart;
+ if (byteCount <= 0) {
+ selStart = m_cursorPosition;
+ selEnd = selStart + 1;
+ byteCount = 1;
+ }
+ if (byteCount <= 8) {
+ const QPoint &startPoint = offsetToPos(selStart);
+ const QPoint &endPoint = offsetToPos(selEnd);
+ const QPoint expandedEndPoint
+ = QPoint(endPoint.x(), endPoint.y() + m_lineHeight);
+ const QRect selRect(startPoint, expandedEndPoint);
+ const QHelpEvent * const helpEvent = static_cast<QHelpEvent *>(e);
+ const QPoint &mousePos = helpEvent->pos();
+ if (selRect.contains(mousePos)) {
+ quint64 beValue, leValue;
+ asIntegers(selStart, byteCount, beValue, leValue);
+ QString leSigned;
+ QString beSigned;
+ switch (byteCount) {
+ case 8: case 7: case 6: case 5:
+ leSigned = QString::number(static_cast<qint64>(leValue));
+ beSigned = QString::number(static_cast<qint64>(beValue));
+ break;
+ case 4: case 3:
+ leSigned = QString::number(static_cast<qint32>(leValue));
+ beSigned = QString::number(static_cast<qint32>(beValue));
+ break;
+ case 2:
+ leSigned = QString::number(static_cast<qint16>(leValue));
+ beSigned = QString::number(static_cast<qint16>(beValue));
+ break;
+ case 1:
+ leSigned = QString::number(static_cast<qint8>(leValue));
+ beSigned = QString::number(static_cast<qint8>(beValue));
+ break;
+ }
+ hide = false;
+ QToolTip::showText(helpEvent->globalPos(),
+ tr("Decimal unsigned value (little endian): %1\n"
+ "Decimal unsigned value (big endian): %2\n"
+ "Decimal signed value (little endian): %3\n"
+ "Decimal signed value (big endian): %4")
+ .arg(QString::number(leValue))
+ .arg(QString::number(beValue))
+ .arg(leSigned).arg(beSigned));
+ }
+ }
+ if (hide)
+ QToolTip::hideText();
+ e->accept();
+ return true;
}
+
return QAbstractScrollArea::event(e);
}
@@ -1271,13 +1330,7 @@ void BinEditor::contextMenuEvent(QContextMenuEvent *event)
quint64 beAddress = 0;
quint64 leAddress = 0;
if (byteCount <= 8) {
- const QByteArray &data = dataMid(selStart, byteCount);
- for (int pos = 0; pos < byteCount; ++pos) {
- const quint64 val = static_cast<quint64>(data.at(pos)) & 0xff;
- beAddress += val << (pos * 8);
- leAddress += val << ((byteCount - pos - 1) * 8);
- }
-
+ asIntegers(selStart, byteCount, beAddress, leAddress);
setupJumpToMenuAction(&contextMenu, &jumpToBeAddressHere,
&jumpToBeAddressNewWindow, beAddress);
@@ -1335,3 +1388,22 @@ void BinEditor::setNewWindowRequestAllowed()
{
m_canRequestNewWindow = true;
}
+
+QPoint BinEditor::offsetToPos(int offset)
+{
+ const int x = m_labelWidth + (offset % 16) * m_columnWidth;
+ const int y = (offset / 16) * m_lineHeight;
+ return QPoint(x, y);
+}
+
+void BinEditor::asIntegers(int offset, int count, quint64 &beValue,
+ quint64 &leValue)
+{
+ beValue = leValue = 0;
+ const QByteArray &data = dataMid(offset, count);
+ for (int pos = 0; pos < count; ++pos) {
+ const quint64 val = static_cast<quint64>(data.at(pos)) & 0xff;
+ beValue += val << (pos * 8);
+ leValue += val << ((count - pos - 1) * 8);
+ }
+}
diff --git a/src/plugins/bineditor/bineditor.h b/src/plugins/bineditor/bineditor.h
index 8dfc695be1..cea7b8d168 100644
--- a/src/plugins/bineditor/bineditor.h
+++ b/src/plugins/bineditor/bineditor.h
@@ -169,6 +169,9 @@ private:
QByteArray dataMid(int from, int length) const;
QByteArray blockData(int block) const;
+ QPoint offsetToPos(int offset);
+ void asIntegers(int offset, int count, quint64 &beValue, quint64 &leValue);
+
int m_unmodifiedState;
int m_readOnly;
int m_margin;