From d5dad489bf82631e8bf256a2d67947e2770581be Mon Sep 17 00:00:00 2001
From: Thomas Jentzsch
Date: Mon, 6 Sep 2021 10:31:48 +0200
Subject: [PATCH] enhanced tooltips (per cell and/or whole widget) for
DataGridWidget updated debugger doc
---
docs/debugger.html | 8 ++++----
docs/graphics/debugger_iotab.png | Bin 5128 -> 5357 bytes
src/debugger/gui/DataGridWidget.cxx | 19 +++++++++++++++----
src/debugger/gui/DataGridWidget.hxx | 2 ++
src/debugger/gui/RiotWidget.cxx | 2 ++
5 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/docs/debugger.html b/docs/debugger.html
index 1171d4864..875c996bc 100644
--- a/docs/debugger.html
+++ b/docs/debugger.html
@@ -1098,11 +1098,11 @@ in another part of the debugger).
As with the TIA tab, most of the values here will be self-explanatory to a 2600
-developer, and almost all can be modified. However, the SWCHx registers need
+developer, and many can be modified. However, the SWCHx registers need
further explanation:
-
SWCHx(W) can be modified; here, the (W) stands for write. Similarly,
-SWACNT/SWBCNT can be directly modified. However, the results of reading back from
-the SWCHx register are influenced by SWACNT/SWBCNT, and SWCHx(R) is a read-only display
+
SWCHx(W/R) can be modified; here (W) stands for write, (R) for read.
+Similarly, SWxCNT can be directly modified. However, the results of reading
+back from the SWCHx register are influenced by SWxCNT, and SWCHx(R) is
reflecting this result.
diff --git a/docs/graphics/debugger_iotab.png b/docs/graphics/debugger_iotab.png
index a83fd33ad5a368953682cf7b1aaa1ecb900102b4..67b6fbdd4b180f45dd1333d02cdf37a752413d56 100644
GIT binary patch
literal 5357
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 0 && row < _rows && column >= 0 && column < _cols)
+ _toolTipList[row * _cols + column] = text;
+}
+
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int DataGridWidget::getToolTipIndex(const Common::Point& pos) const
{
@@ -607,9 +615,12 @@ string DataGridWidget::getToolTip(const Common::Point& pos) const
const Int32 val = _valueList[idx];
ostringstream buf;
- buf << _toolTipText
- << "$" << Common::Base::toString(val, Common::Base::Fmt::_16)
- << " = #" << val;
+ if(_toolTipList[idx] != EmptyString)
+ buf << _toolTipList[idx];
+ else
+ buf << _toolTipText;
+ buf << "$" << Common::Base::toString(val, Common::Base::Fmt::_16)
+ << " = #" << val;
if(val < 0x100)
{
if(val >= 0x80)
diff --git a/src/debugger/gui/DataGridWidget.hxx b/src/debugger/gui/DataGridWidget.hxx
index d89b530ce..99f50bddc 100644
--- a/src/debugger/gui/DataGridWidget.hxx
+++ b/src/debugger/gui/DataGridWidget.hxx
@@ -84,6 +84,7 @@ class DataGridWidget : public EditableWidget
void setCrossed(bool enable);
+ void setGridToolTip(int column, int row, const string& text);
string getToolTip(const Common::Point& pos) const override;
bool changedToolTip(const Common::Point& oldPos, const Common::Point& newPos) const override;
@@ -129,6 +130,7 @@ class DataGridWidget : public EditableWidget
IntArray _addrList;
IntArray _valueList;
StringList _valueStringList;
+ StringList _toolTipList;
BoolArray _changedList;
BoolArray _hiliteList;
diff --git a/src/debugger/gui/RiotWidget.cxx b/src/debugger/gui/RiotWidget.cxx
index cbb577e8e..092bde657 100644
--- a/src/debugger/gui/RiotWidget.cxx
+++ b/src/debugger/gui/RiotWidget.cxx
@@ -157,6 +157,8 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont,
}
xpos += t->getWidth() + _fontWidth / 2;
myTimRead = new DataGridWidget(boss, nfont, xpos, ypos, 1, 4, 4, 30, Common::Base::Fmt::_16);
+ myTimRead->setGridToolTip(0, 1, "Timer interrupt flag in bit 7.\n");
+ myTimRead->setGridToolTip(0, 2, "Number of CPU cycles since last TIMxxT write.\n");
myTimRead->setTarget(this);
myTimRead->setEditable(false);