Add Tooltip support to TreeTable.

This commit is contained in:
Rene Gollent
2012-07-18 18:44:53 -04:00
parent a2e7d8df7b
commit 489cc35661
2 changed files with 62 additions and 0 deletions
@@ -1,5 +1,6 @@
/*
* Copyright 2009, Ingo Weinhold, [email protected].
* Copyright 2012, Rene Gollent, [email protected].
* Distributed under the terms of the MIT License.
*/
@@ -226,6 +227,14 @@ TreeTableModel::NotifyNodesChanged(const TreeTablePath& path, int32 childIndex,
}
// #pragma mark - TreeTableToolTipProvider
TreeTableToolTipProvider::~TreeTableToolTipProvider()
{
}
// #pragma mark - TreeTableListener
@@ -650,6 +659,7 @@ TreeTable::TreeTable(const char* name, uint32 flags, border_style borderStyle,
:
AbstractTable(name, flags, borderStyle, showHorizontalScrollbar),
fModel(NULL),
fToolTipProvider(NULL),
fRootNode(NULL),
fSelectionModel(this),
fIgnoreSelectionChange(0)
@@ -731,6 +741,13 @@ TreeTable::SetTreeTableModel(TreeTableModel* model)
}
void
TreeTable::SetToolTipProvider(TreeTableToolTipProvider* toolTipProvider)
{
fToolTipProvider = toolTipProvider;
}
TreeTableSelectionModel*
TreeTable::SelectionModel()
{
@@ -810,6 +827,31 @@ TreeTable::RemoveTreeTableListener(TreeTableListener* listener)
}
bool
TreeTable::GetToolTipAt(BPoint point, BToolTip** _tip)
{
if (fToolTipProvider == NULL)
return AbstractTable::GetToolTipAt(point, _tip);
// get the table row
BRow* row = RowAt(point);
if (row == NULL)
return AbstractTable::GetToolTipAt(point, _tip);
TreeTableRow* treeRow = dynamic_cast<TreeTableRow*>(row);
// get the table column
BColumn* column = ColumnAt(point);
int32 columnIndex = column != NULL ? column->LogicalFieldNum() : -1;
TreeTablePath path;
_GetPathForNode(treeRow->Node(), path);
return fToolTipProvider->GetToolTipForTablePath(path, columnIndex,
_tip);
}
void
TreeTable::SelectionChanged()
{
@@ -1,5 +1,6 @@
/*
* Copyright 2009, Ingo Weinhold, [email protected].
* Copyright 2012, Rene Gollent, [email protected].
* Distributed under the terms of the MIT License.
*/
#ifndef TREE_TABLE_H
@@ -122,6 +123,17 @@ private:
};
class TreeTableToolTipProvider {
public:
virtual ~TreeTableToolTipProvider();
virtual bool GetToolTipForTablePath(
const TreeTablePath& path,
int32 columnIndex, BToolTip** _tip) = 0;
// columnIndex can be -1, if not in a column
};
class TreeTableListener {
public:
virtual ~TreeTableListener();
@@ -157,6 +169,11 @@ public:
bool SetTreeTableModel(TreeTableModel* model);
TreeTableModel* GetTreeTableModel() const { return fModel; }
void SetToolTipProvider(
TreeTableToolTipProvider* toolTipProvider);
TreeTableToolTipProvider* ToolTipProvider() const
{ return fToolTipProvider; }
TreeTableSelectionModel* SelectionModel();
void SelectNode(const TreeTablePath& path,
@@ -177,6 +194,8 @@ public:
TreeTableListener* listener);
protected:
virtual bool GetToolTipAt(BPoint point, BToolTip** _tip);
virtual void SelectionChanged();
virtual AbstractColumn* CreateColumn(TableColumn* column);
@@ -226,6 +245,7 @@ private:
private:
TreeTableModel* fModel;
TreeTableToolTipProvider* fToolTipProvider;
TreeTableNode* fRootNode;
TreeTableSelectionModel fSelectionModel;
ListenerList fListeners;