From df459da6ed9a147f1c3fb2ca70429ee20c2d1058 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Wed, 15 Jul 2015 21:34:44 -0400 Subject: [PATCH] {Tree,Table}: Add cell rect accessor. BColumnListView: - Add helper method for getting the visible rect of a given field. Refactor SuggestTextPosition to use it. {Tree,Table}: - Add wrapper to retrieve table cell rect using the aforementioned BCLV helper. --- headers/private/interface/ColumnListView.h | 3 +++ src/apps/debuganalyzer/gui/table/Table.cpp | 17 +++++++++++++++ src/apps/debuganalyzer/gui/table/Table.h | 3 +++ .../debuganalyzer/gui/table/TreeTable.cpp | 18 ++++++++++++++++ src/apps/debuganalyzer/gui/table/TreeTable.h | 3 +++ src/kits/interface/ColumnListView.cpp | 21 +++++++++++++------ 6 files changed, 59 insertions(+), 6 deletions(-) diff --git a/headers/private/interface/ColumnListView.h b/headers/private/interface/ColumnListView.h index 76558bc31c..76fd0bc916 100644 --- a/headers/private/interface/ColumnListView.h +++ b/headers/private/interface/ColumnListView.h @@ -363,6 +363,9 @@ public: BPoint SuggestTextPosition(const BRow* row, const BColumn* column = NULL) const; + BRect GetFieldRect(const BRow* row, + const BColumn* column) const; + void SetLatchWidth(float width); float LatchWidth() const; virtual void DrawLatch(BView* view, BRect frame, diff --git a/src/apps/debuganalyzer/gui/table/Table.cpp b/src/apps/debuganalyzer/gui/table/Table.cpp index 2eb7b93cc3..059d5d18bf 100644 --- a/src/apps/debuganalyzer/gui/table/Table.cpp +++ b/src/apps/debuganalyzer/gui/table/Table.cpp @@ -499,6 +499,23 @@ Table::RemoveTableListener(TableListener* listener) } +status_t +Table::GetCellRectAt(int32 rowIndex, int32 colIndex, BRect& _output) const +{ + BRow* row = fRows.ItemAt(rowIndex); + if (row == NULL) + return B_ENTRY_NOT_FOUND; + + AbstractColumn* column = fColumns.ItemAt(colIndex); + if (column == NULL) + return B_ENTRY_NOT_FOUND; + + _output = GetFieldRect(row, column); + + return B_OK; +} + + bool Table::GetToolTipAt(BPoint point, BToolTip** _tip) { diff --git a/src/apps/debuganalyzer/gui/table/Table.h b/src/apps/debuganalyzer/gui/table/Table.h index 99abf6853e..649e0e30a2 100644 --- a/src/apps/debuganalyzer/gui/table/Table.h +++ b/src/apps/debuganalyzer/gui/table/Table.h @@ -135,6 +135,9 @@ public: bool AddTableListener(TableListener* listener); void RemoveTableListener(TableListener* listener); + virtual status_t GetCellRectAt(int32 rowIndex, int32 colIndex, + BRect& _output) const; + protected: virtual bool GetToolTipAt(BPoint point, BToolTip** _tip); diff --git a/src/apps/debuganalyzer/gui/table/TreeTable.cpp b/src/apps/debuganalyzer/gui/table/TreeTable.cpp index c69149ed9b..7c4eaaa1aa 100644 --- a/src/apps/debuganalyzer/gui/table/TreeTable.cpp +++ b/src/apps/debuganalyzer/gui/table/TreeTable.cpp @@ -843,6 +843,24 @@ TreeTable::RemoveTreeTableListener(TreeTableListener* listener) } +status_t +TreeTable::GetCellRectAt(const TreeTablePath& path, int32 colIndex, + BRect& _output) const +{ + TreeTableNode* node = _NodeForPath(path); + if (node == NULL) + return B_ENTRY_NOT_FOUND; + + AbstractColumn* column = fColumns.ItemAt(colIndex); + if (column == NULL) + return B_ENTRY_NOT_FOUND; + + _output = GetFieldRect(node->Row(), column); + + return B_OK; +} + + bool TreeTable::GetToolTipAt(BPoint point, BToolTip** _tip) { diff --git a/src/apps/debuganalyzer/gui/table/TreeTable.h b/src/apps/debuganalyzer/gui/table/TreeTable.h index 81d8924a7a..92d35f8681 100644 --- a/src/apps/debuganalyzer/gui/table/TreeTable.h +++ b/src/apps/debuganalyzer/gui/table/TreeTable.h @@ -195,6 +195,9 @@ public: void RemoveTreeTableListener( TreeTableListener* listener); + virtual status_t GetCellRectAt(const TreeTablePath& path, + int32 colIndex, BRect& _output) const; + protected: virtual bool GetToolTipAt(BPoint point, BToolTip** _tip); diff --git a/src/kits/interface/ColumnListView.cpp b/src/kits/interface/ColumnListView.cpp index bc28cc863a..10f2d58996 100644 --- a/src/kits/interface/ColumnListView.cpp +++ b/src/kits/interface/ColumnListView.cpp @@ -1501,10 +1501,23 @@ BColumnListView::EditColor() const BPoint BColumnListView::SuggestTextPosition(const BRow* row, const BColumn* inColumn) const +{ + BRect rect(GetFieldRect(row, inColumn)); + + font_height fh; + fOutlineView->GetFontHeight(&fh); + float baseline = floor(rect.top + fh.ascent + + (rect.Height() + 1 - (fh.ascent + fh.descent)) / 2); + return BPoint(rect.left + 8, baseline); +} + + +BRect +BColumnListView::GetFieldRect(const BRow* row, const BColumn* inColumn) const { BRect rect; GetRowRect(row, &rect); - if (inColumn) { + if (inColumn != NULL) { float leftEdge = MAX(kLeftMargin, LatchWidth()); for (int index = 0; index < fColumns.CountItems(); index++) { BColumn* column = (BColumn*) fColumns.ItemAt(index); @@ -1521,11 +1534,7 @@ BColumnListView::SuggestTextPosition(const BRow* row, } } - font_height fh; - fOutlineView->GetFontHeight(&fh); - float baseline = floor(rect.top + fh.ascent - + (rect.Height() + 1 - (fh.ascent + fh.descent)) / 2); - return BPoint(rect.left + 8, baseline); + return rect; }