1 /* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef ABSTRACT_TABLE_H 6 #define ABSTRACT_TABLE_H 7 8 #include <ObjectList.h> 9 #include <ColumnListView.h> 10 11 12 class TableColumn; 13 14 15 class AbstractTableModel { 16 public: 17 virtual ~AbstractTableModel(); 18 19 virtual int32 CountColumns() const = 0; 20 }; 21 22 23 class AbstractTable : protected BColumnListView { 24 public: 25 AbstractTable(const char* name, uint32 flags, 26 border_style borderStyle = B_NO_BORDER, 27 bool showHorizontalScrollbar = true); 28 virtual ~AbstractTable(); 29 30 BView* ToView() { return this; } 31 32 virtual void AddColumn(TableColumn* column); 33 void ResizeColumnToPreferred(int32 index); 34 void ResizeAllColumnsToPreferred(); 35 36 protected: 37 class AbstractColumn; 38 39 typedef BObjectList<AbstractColumn> ColumnList; 40 41 protected: 42 virtual AbstractColumn* CreateColumn(TableColumn* column) = 0; 43 44 protected: 45 ColumnList fColumns; 46 }; 47 48 49 // implementation private 50 51 class AbstractTable::AbstractColumn : public BColumn { 52 public: 53 AbstractColumn(TableColumn* tableColumn); 54 virtual ~AbstractColumn(); 55 56 virtual void SetModel(AbstractTableModel* model) = 0; 57 58 TableColumn* GetTableColumn() const { return fTableColumn; } 59 60 protected: 61 TableColumn* fTableColumn; 62 }; 63 64 65 #endif // ABSTRACT_TABLE_H 66