* TableColumn no longer has BColumn as base class. We use another level of

indirection (Table::Column) instead.
* Moved TableColumn to its own header/source files.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30414 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2009-04-25 23:35:29 +00:00
parent f126e71d49
commit e70320a769
5 changed files with 91 additions and 101 deletions

View File

@ -9,5 +9,6 @@ UseHeaders $(HAIKU_DEBUG_ANALYZER_HEADERS) ;
MergeObject DebugAnalyzer_gui_table.o
:
Table.cpp
TableColumn.cpp
TableColumns.cpp
;

View File

@ -36,67 +36,94 @@ TableModel::~TableModel()
}
// #pragma mark - TableColumn
// #pragma mark - TableListener
TableColumn::TableColumn(int32 modelIndex, float width, float minWidth,
float maxWidth, alignment align)
:
BColumn(width, minWidth, maxWidth, align),
fModel(NULL),
fModelIndex(modelIndex)
{
}
TableColumn::~TableColumn()
TableListener::~TableListener()
{
}
void
TableColumn::SetTableModel(TableModel* model)
TableListener::TableRowInvoked(Table* table, int32 rowIndex)
{
}
// #pragma mark - Column
class Table::Column : public BColumn {
public:
Column(TableModel* model,
TableColumn* tableColumn);
virtual ~Column();
void SetTableModel(TableModel* model);
protected:
virtual void DrawTitle(BRect rect, BView* targetView);
virtual void DrawField(BField* field, BRect rect,
BView* targetView);
virtual int CompareFields(BField* field1, BField* field2);
virtual void GetColumnName(BString* into) const;
virtual float GetPreferredWidth(BField* field,
BView* parent) const;
private:
TableModel* fModel;
TableColumn* fTableColumn;
};
Table::Column::Column(TableModel* model, TableColumn* tableColumn)
:
BColumn(tableColumn->Width(), tableColumn->MinWidth(),
tableColumn->MaxWidth(), tableColumn->Alignment()),
fModel(model),
fTableColumn(tableColumn)
{
}
Table::Column::~Column()
{
delete fTableColumn;
}
void
Table::Column::SetTableModel(TableModel* model)
{
fModel = model;
}
void
TableColumn::DrawValue(const Variant& value, BRect rect, BView* targetView)
Table::Column::DrawTitle(BRect rect, BView* targetView)
{
}
int
TableColumn::CompareValues(const Variant& a, const Variant& b)
{
return 0;
}
float
TableColumn::GetPreferredValueWidth(const Variant& value, BView* parent) const
{
return Width();
fTableColumn->DrawTitle(rect, targetView);
}
void
TableColumn::DrawField(BField* _field, BRect rect, BView* targetView)
Table::Column::DrawField(BField* _field, BRect rect, BView* targetView)
{
TableField* field = dynamic_cast<TableField*>(_field);
if (field == NULL)
return;
int32 modelIndex = fTableColumn->ModelIndex();
Variant value;
if (!fModel->GetValueAt(field->RowIndex(), fModelIndex, value))
if (!fModel->GetValueAt(field->RowIndex(), modelIndex, value))
return;
DrawValue(value, rect, targetView);
fTableColumn->DrawValue(value, rect, targetView);
}
int
TableColumn::CompareFields(BField* _field1, BField* _field2)
Table::Column::CompareFields(BField* _field1, BField* _field2)
{
TableField* field1 = dynamic_cast<TableField*>(_field1);
TableField* field2 = dynamic_cast<TableField*>(_field2);
@ -109,45 +136,40 @@ TableColumn::CompareFields(BField* _field1, BField* _field2)
if (field2 == NULL)
return 1;
int32 modelIndex = fTableColumn->ModelIndex();
Variant value1;
bool valid1 = fModel->GetValueAt(field1->RowIndex(), fModelIndex, value1);
bool valid1 = fModel->GetValueAt(field1->RowIndex(), modelIndex, value1);
Variant value2;
bool valid2 = fModel->GetValueAt(field2->RowIndex(), fModelIndex, value2);
bool valid2 = fModel->GetValueAt(field2->RowIndex(), modelIndex, value2);
if (!valid1)
return valid2 ? -1 : 0;
if (!valid2)
return 1;
return CompareValues(value1, value2);
return fTableColumn->CompareValues(value1, value2);
}
void
Table::Column::GetColumnName(BString* into) const
{
fTableColumn->GetColumnName(into);
}
float
TableColumn::GetPreferredWidth(BField* _field, BView* parent) const
Table::Column::GetPreferredWidth(BField* _field, BView* parent) const
{
TableField* field = dynamic_cast<TableField*>(_field);
if (field == NULL)
return Width();
int32 modelIndex = fTableColumn->ModelIndex();
Variant value;
if (!fModel->GetValueAt(field->RowIndex(), fModelIndex, value))
if (!fModel->GetValueAt(field->RowIndex(), modelIndex, value))
return Width();
return GetPreferredValueWidth(value, parent);
}
// #pragma mark - TableListener
TableListener::~TableListener()
{
}
void
TableListener::TableRowInvoked(Table* table, int32 rowIndex)
{
return fTableColumn->GetPreferredWidth(value, parent);
}
@ -190,7 +212,7 @@ Table::SetTableModel(TableModel* model)
if (fModel != NULL) {
Clear();
for (int32 i = 0; TableColumn* column = fColumns.ItemAt(i); i++)
for (int32 i = 0; Column* column = fColumns.ItemAt(i); i++)
column->SetTableModel(NULL);
}
@ -199,7 +221,7 @@ Table::SetTableModel(TableModel* model)
if (fModel == NULL)
return;
for (int32 i = 0; TableColumn* column = fColumns.ItemAt(i); i++)
for (int32 i = 0; Column* column = fColumns.ItemAt(i); i++)
column->SetTableModel(fModel);
// create the rows
@ -240,12 +262,14 @@ Table::AddColumn(TableColumn* column)
if (column == NULL)
return;
if (!fColumns.AddItem(column))
Column* privateColumn = new Column(fModel, column);
if (!fColumns.AddItem(privateColumn)) {
delete privateColumn;
throw std::bad_alloc();
}
column->SetTableModel(fModel);
BColumnListView::AddColumn(column, column->ModelIndex());
BColumnListView::AddColumn(privateColumn, column->ModelIndex());
}

View File

@ -9,6 +9,8 @@
#include <ColumnTypes.h>
#include <ObjectList.h>
#include "table/TableColumn.h"
#include "Variant.h"
@ -27,45 +29,6 @@ public:
};
class TableColumn : protected BColumn {
public:
TableColumn(int32 modelIndex, float width,
float minWidth, float maxWidth,
alignment align);
virtual ~TableColumn();
int32 ModelIndex() const { return fModelIndex; }
float Width() const { return BColumn::Width(); }
protected:
virtual void DrawValue(const Variant& value, BRect rect,
BView* targetView);
virtual int CompareValues(const Variant& a,
const Variant& b);
virtual float GetPreferredValueWidth(const Variant& value,
BView* parent) const;
protected:
virtual void DrawField(BField* field, BRect rect,
BView* targetView);
virtual int CompareFields(BField* field1, BField* field2);
virtual float GetPreferredWidth(BField* field,
BView* parent) const;
void SetTableModel(TableModel* model);
// package private
private:
friend class Table;
private:
TableModel* fModel;
int32 fModelIndex;
};
class TableListener {
public:
virtual ~TableListener();
@ -96,7 +59,9 @@ public:
void RemoveTableListener(TableListener* listener);
private:
typedef BObjectList<TableColumn> ColumnList;
class Column;
typedef BObjectList<Column> ColumnList;
typedef BObjectList<TableListener> ListenerList;
private:

View File

@ -49,7 +49,7 @@ DelagateBasedTableColumn::DrawValue(const Variant& value, BRect rect,
float
DelagateBasedTableColumn::GetPreferredValueWidth(const Variant& value,
DelagateBasedTableColumn::GetPreferredWidth(const Variant& value,
BView* parent) const
{
return fColumnDelegate->GetPreferredWidth(PrepareField(value), parent);

View File

@ -7,7 +7,7 @@
#include <ColumnTypes.h>
#include "table/Table.h"
#include "table/TableColumn.h"
class DelagateBasedTableColumn : public TableColumn {
@ -25,7 +25,7 @@ protected:
virtual void DrawValue(const Variant& value, BRect rect,
BView* targetView);
virtual float GetPreferredValueWidth(const Variant& value,
virtual float GetPreferredWidth(const Variant& value,
BView* parent) const;
virtual BField* PrepareField(const Variant& value) const = 0;