Implement support for tooltips in VariableView. Implements #8286.
- These show the memory or register location(s) of the variable over which the mouse is hovering.
This commit is contained in:
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include <Looper.h>
|
#include <Looper.h>
|
||||||
#include <PopUpMenu.h>
|
#include <PopUpMenu.h>
|
||||||
|
#include <ToolTip.h>
|
||||||
|
|
||||||
#include <AutoDeleter.h>
|
#include <AutoDeleter.h>
|
||||||
#include <AutoLocker.h>
|
#include <AutoLocker.h>
|
||||||
@@ -345,7 +346,8 @@ protected:
|
|||||||
// #pragma mark - VariableTableModel
|
// #pragma mark - VariableTableModel
|
||||||
|
|
||||||
|
|
||||||
class VariablesView::VariableTableModel : public TreeTableModel {
|
class VariablesView::VariableTableModel : public TreeTableModel,
|
||||||
|
public TreeTableToolTipProvider {
|
||||||
public:
|
public:
|
||||||
VariableTableModel();
|
VariableTableModel();
|
||||||
~VariableTableModel();
|
~VariableTableModel();
|
||||||
@@ -379,6 +381,10 @@ public:
|
|||||||
void NotifyNodeChanged(ModelNode* node);
|
void NotifyNodeChanged(ModelNode* node);
|
||||||
void NotifyNodeHidden(ModelNode* node);
|
void NotifyNodeHidden(ModelNode* node);
|
||||||
|
|
||||||
|
virtual bool GetToolTipForTablePath(
|
||||||
|
const TreeTablePath& path,
|
||||||
|
int32 columnIndex, BToolTip** _tip);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct NodeHashDefinition {
|
struct NodeHashDefinition {
|
||||||
typedef ValueNodeChild* KeyType;
|
typedef ValueNodeChild* KeyType;
|
||||||
@@ -1159,6 +1165,45 @@ VariablesView::VariableTableModel::NotifyNodeHidden(ModelNode* node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
VariablesView::VariableTableModel::GetToolTipForTablePath(
|
||||||
|
const TreeTablePath& path, int32 columnIndex, BToolTip** _tip)
|
||||||
|
{
|
||||||
|
ModelNode* node = (ModelNode*)NodeForPath(path);
|
||||||
|
if (node == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (node->NodeChild()->LocationResolutionState() != B_OK)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
ValueLocation* location = node->NodeChild()->Location();
|
||||||
|
BString tipData("Location piece(s):");
|
||||||
|
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("\n\t(%ld): Address: 0x%llx",
|
||||||
|
i, piece.address);
|
||||||
|
break;
|
||||||
|
case VALUE_PIECE_LOCATION_REGISTER:
|
||||||
|
pieceData.SetToFormat("\n\t(%ld): Register (%lu)",
|
||||||
|
i, piece.reg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tipData += pieceData;
|
||||||
|
}
|
||||||
|
|
||||||
|
*_tip = new(std::nothrow) BTextToolTip(tipData);
|
||||||
|
if (*_tip == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
VariablesView::VariableTableModel::_AddNode(Variable* variable,
|
VariablesView::VariableTableModel::_AddNode(Variable* variable,
|
||||||
ModelNode* parent, ValueNodeChild* nodeChild, bool isPresentationNode,
|
ModelNode* parent, ValueNodeChild* nodeChild, bool isPresentationNode,
|
||||||
@@ -1734,6 +1779,7 @@ VariablesView::_Init()
|
|||||||
if (fVariableTableModel->Init() != B_OK)
|
if (fVariableTableModel->Init() != B_OK)
|
||||||
throw std::bad_alloc();
|
throw std::bad_alloc();
|
||||||
fVariableTable->SetTreeTableModel(fVariableTableModel);
|
fVariableTable->SetTreeTableModel(fVariableTableModel);
|
||||||
|
fVariableTable->SetToolTipProvider(fVariableTableModel);
|
||||||
|
|
||||||
fContainerListener = new ContainerListener(this);
|
fContainerListener = new ContainerListener(this);
|
||||||
fVariableTableModel->SetContainerListener(fContainerListener);
|
fVariableTableModel->SetContainerListener(fContainerListener);
|
||||||
|
|||||||
Reference in New Issue
Block a user