Improve VariableView's tooltip handling.

- Make GetToolTipInfo() sensitive to the column being hovered over.
  If hovering over the variable name, we display its value location
  information as before. However, if hovering over the value column,
  the tooltip now displays the full value of the variable, if
  available.
This commit is contained in:
Rene Gollent 2013-04-24 21:17:49 -04:00
parent 7b6fd5d1a8
commit bbaaaf2eae

View File

@ -1248,31 +1248,48 @@ VariablesView::VariableTableModel::GetToolTipForTablePath(
if (node->NodeChild()->LocationResolutionState() != B_OK)
return false;
ValueLocation* location = node->NodeChild()->Location();
BString tipData;
for (int32 i = 0; i < location->CountPieces(); i++) {
ValuePieceLocation piece = location->PieceAt(i);
BString pieceData;
switch (piece.type) {
case VALUE_PIECE_LOCATION_MEMORY:
pieceData.SetToFormat("(%" B_PRId32 "): Address: %#" B_PRIx64
", Size: %" B_PRId64 " bytes", i, piece.address, piece.size);
break;
case VALUE_PIECE_LOCATION_REGISTER:
{
Architecture* architecture = fThread->GetTeam()->GetArchitecture();
pieceData.SetToFormat("(%" B_PRId32 "): Register (%s)",
i, architecture->Registers()[piece.reg].Name());
switch (columnIndex) {
case 0:
{
ValueLocation* location = node->NodeChild()->Location();
for (int32 i = 0; i < location->CountPieces(); i++) {
ValuePieceLocation piece = location->PieceAt(i);
BString pieceData;
switch (piece.type) {
case VALUE_PIECE_LOCATION_MEMORY:
pieceData.SetToFormat("(%" B_PRId32 "): Address: %#"
B_PRIx64 ", Size: %" B_PRId64 " bytes", i,
piece.address, piece.size);
break;
case VALUE_PIECE_LOCATION_REGISTER:
{
Architecture* architecture = fThread->GetTeam()
->GetArchitecture();
pieceData.SetToFormat("(%" B_PRId32 "): Register (%s)",
i, architecture->Registers()[piece.reg].Name());
break;
}
default:
break;
}
break;
tipData += pieceData;
if (i < location->CountPieces() - 1)
tipData += "\n";
}
default:
break;
break;
}
case 1:
{
Value* value = node->GetValue();
if (value != NULL)
value->ToString(tipData);
tipData += pieceData;
if (i < location->CountPieces() - 1)
tipData += "\n";
break;
}
default:
break;
}
if (tipData.IsEmpty())