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