diff --git a/src/apps/debuganalyzer/gui/table/Table.cpp b/src/apps/debuganalyzer/gui/table/Table.cpp index bfdd864948..5b7bcb00fd 100644 --- a/src/apps/debuganalyzer/gui/table/Table.cpp +++ b/src/apps/debuganalyzer/gui/table/Table.cpp @@ -194,6 +194,13 @@ TableSelectionModel::_Update() } +// #pragma mark - TableToolTipProvider + + +TableToolTipProvider::~TableToolTipProvider() +{ +} + // #pragma mark - TableListener @@ -342,6 +349,7 @@ Table::Table(const char* name, uint32 flags, border_style borderStyle, : AbstractTable(name, flags, borderStyle, showHorizontalScrollbar), fModel(NULL), + fToolTipProvider(NULL), fSelectionModel(this), fIgnoreSelectionChange(0) { @@ -353,6 +361,7 @@ Table::Table(TableModel* model, const char* name, uint32 flags, : AbstractTable(name, flags, borderStyle, showHorizontalScrollbar), fModel(NULL), + fToolTipProvider(NULL), fSelectionModel(this), fIgnoreSelectionChange(0) { @@ -399,6 +408,13 @@ Table::SetTableModel(TableModel* model) } +void +Table::SetToolTipProvider(TableToolTipProvider* toolTipProvider) +{ + fToolTipProvider = toolTipProvider; +} + + TableSelectionModel* Table::SelectionModel() { @@ -452,6 +468,27 @@ Table::RemoveTableListener(TableListener* listener) } +bool +Table::GetToolTipAt(BPoint point, BToolTip** _tip) +{ + if (fToolTipProvider == NULL) + return AbstractTable::GetToolTipAt(point, _tip); + + // get the table row + BRow* row = RowAt(point); + int32 rowIndex = row != NULL ? _ModelIndexOfRow(row) : -1; + if (rowIndex < 0) + return AbstractTable::GetToolTipAt(point, _tip); + + // get the table column + BColumn* column = ColumnAt(point); + int32 columnIndex = column != NULL ? column->LogicalFieldNum() : -1; + + return fToolTipProvider->GetToolTipForTableCell(rowIndex, columnIndex, + _tip); +} + + void Table::SelectionChanged() { diff --git a/src/apps/debuganalyzer/gui/table/Table.h b/src/apps/debuganalyzer/gui/table/Table.h index 57901c713b..b75c25b067 100644 --- a/src/apps/debuganalyzer/gui/table/Table.h +++ b/src/apps/debuganalyzer/gui/table/Table.h @@ -79,6 +79,16 @@ private: }; +class TableToolTipProvider { +public: + virtual ~TableToolTipProvider(); + + virtual bool GetToolTipForTableCell(int32 rowIndex, + int32 columnIndex, BToolTip** _tip) = 0; + // columnIndex can be -1, if not in a column +}; + + class TableListener { public: virtual ~TableListener(); @@ -102,6 +112,11 @@ public: void SetTableModel(TableModel* model); TableModel* GetTableModel() const { return fModel; } + void SetToolTipProvider( + TableToolTipProvider* toolTipProvider); + TableToolTipProvider* ToolTipProvider() const + { return fToolTipProvider; } + TableSelectionModel* SelectionModel(); void SelectRow(int32 rowIndex, bool extendSelection); @@ -112,6 +127,8 @@ public: void RemoveTableListener(TableListener* listener); protected: + virtual bool GetToolTipAt(BPoint point, BToolTip** _tip); + virtual void SelectionChanged(); virtual AbstractColumn* CreateColumn(TableColumn* column); @@ -140,6 +157,7 @@ private: private: TableModel* fModel; + TableToolTipProvider* fToolTipProvider; RowList fRows; TableSelectionModel fSelectionModel; ListenerList fListeners;