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 12class TableColumn; 13 14 15class AbstractTableModelBase { 16public: 17 virtual ~AbstractTableModelBase(); 18 19 virtual int32 CountColumns() const = 0; 20}; 21 22 23// NOTE: Intention is to inherit from "protected BColumnListView", but GCC2 24// has problems dynamic_casting a BHandler pointer to a BView then... 25class AbstractTable : public BColumnListView { 26public: 27 AbstractTable(const char* name, uint32 flags, 28 border_style borderStyle = B_NO_BORDER, 29 bool showHorizontalScrollbar = true); 30 virtual ~AbstractTable(); 31 32 BView* ToView() { return this; } 33 34 virtual void AddColumn(TableColumn* column); 35 void ResizeColumnToPreferred(int32 index); 36 void ResizeAllColumnsToPreferred(); 37 38 list_view_type SelectionMode() const; 39 void SetSelectionMode(list_view_type type); 40 void DeselectAll(); 41 42 void SetSortingEnabled(bool enabled); 43 bool SortingEnabled() const; 44 void SetSortColumn(TableColumn* column, bool add, 45 bool ascending); 46 void ClearSortColumns(); 47 48protected: 49 class AbstractColumn; 50 friend class AbstractColumn; 51 52 typedef BObjectList<AbstractColumn> ColumnList; 53 54protected: 55 virtual AbstractColumn* CreateColumn(TableColumn* column) = 0; 56 57 virtual void ColumnMouseDown(AbstractColumn* column, 58 BRow* row, BField* field, BPoint point, 59 uint32 buttons) = 0; 60 virtual void ColumnMouseUp(AbstractColumn* column, 61 BRow* row, BField* field, BPoint point, 62 uint32 buttons) = 0; 63 64 AbstractColumn* GetColumn(TableColumn* column) const; 65 66protected: 67 ColumnList fColumns; 68}; 69 70 71// implementation private 72 73class AbstractTable::AbstractColumn : public BColumn { 74public: 75 AbstractColumn(TableColumn* tableColumn); 76 virtual ~AbstractColumn(); 77 78 void SetTable(AbstractTable* table); 79 80 virtual void SetModel(AbstractTableModelBase* model) = 0; 81 82 TableColumn* GetTableColumn() const { return fTableColumn; } 83 84 virtual void MouseDown(BColumnListView* parent, BRow* row, 85 BField* field, BRect fieldRect, 86 BPoint point, uint32 buttons); 87 virtual void MouseUp(BColumnListView* parent, BRow* row, 88 BField* field); 89 90protected: 91 TableColumn* fTableColumn; 92 AbstractTable* fTable; 93}; 94 95 96#endif // ABSTRACT_TABLE_H 97