Author: bonefish Date: 2009-10-15 06:40:04 +0200 (Thu, 15 Oct 2009) New Revision: 33590 Changeset: http://dev.haiku-os.org/changeset/33590/haiku Modified: haiku/trunk/src/apps/debuganalyzer/gui/table/Table.cpp haiku/trunk/src/apps/debuganalyzer/gui/table/Table.h Log: Added TableToolTipProvider interface that can be set on a Table to easily provide per cell tool tips. Modified: haiku/trunk/src/apps/debuganalyzer/gui/table/Table.cpp =================================================================== --- haiku/trunk/src/apps/debuganalyzer/gui/table/Table.cpp 2009-10-15 04:34:59 UTC (rev 33589) +++ haiku/trunk/src/apps/debuganalyzer/gui/table/Table.cpp 2009-10-15 04:40:04 UTC (rev 33590) @@ -194,7 +194,14 @@ } +// #pragma mark - TableToolTipProvider + +TableToolTipProvider::~TableToolTipProvider() +{ +} + + // #pragma mark - TableListener @@ -342,6 +349,7 @@ : AbstractTable(name, flags, borderStyle, showHorizontalScrollbar), fModel(NULL), + fToolTipProvider(NULL), fSelectionModel(this), fIgnoreSelectionChange(0) { @@ -353,6 +361,7 @@ : AbstractTable(name, flags, borderStyle, showHorizontalScrollbar), fModel(NULL), + fToolTipProvider(NULL), fSelectionModel(this), fIgnoreSelectionChange(0) { @@ -399,6 +408,13 @@ } +void +Table::SetToolTipProvider(TableToolTipProvider* toolTipProvider) +{ + fToolTipProvider = toolTipProvider; +} + + TableSelectionModel* Table::SelectionModel() { @@ -452,6 +468,27 @@ } +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() { Modified: haiku/trunk/src/apps/debuganalyzer/gui/table/Table.h =================================================================== --- haiku/trunk/src/apps/debuganalyzer/gui/table/Table.h 2009-10-15 04:34:59 UTC (rev 33589) +++ haiku/trunk/src/apps/debuganalyzer/gui/table/Table.h 2009-10-15 04:40:04 UTC (rev 33590) @@ -79,6 +79,16 @@ }; +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 @@ 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 @@ 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: TableModel* fModel; + TableToolTipProvider* fToolTipProvider; RowList fRows; TableSelectionModel fSelectionModel; ListenerList fListeners;