Added TableToolTipProvider interface that can be set on a Table to easily

provide per cell tool tips.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33590 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2009-10-15 04:40:04 +00:00
parent c4a5ca9322
commit acb006cb55
2 changed files with 55 additions and 0 deletions

View File

@ -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()
{

View File

@ -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;