1/*
2 * Copyright 2006-2008 Haiku Inc. All rights reserved.
3 * Distributed under the terms of the MIT license.
4 *
5 * Authors:
6 *		Ithamar R. Adema <ithamar@unet.nl>
7 *		James Urquhart
8 *		Stephan A��mus <superstippi@gmx.de>
9 */
10#ifndef PARTITIONLIST_H
11#define PARTITIONLIST_H
12
13
14#include <ColumnListView.h>
15#include <ColumnTypes.h>
16#include <Partition.h>
17
18
19class BPartition;
20
21
22// A field type displaying both a bitmap and a string so that the
23// tree display looks nicer (both text and bitmap are indented)
24class BBitmapStringField : public BStringField {
25	typedef BStringField Inherited;
26public:
27								BBitmapStringField(BBitmap* bitmap,
28									const char* string);
29	virtual						~BBitmapStringField();
30
31			void				SetBitmap(BBitmap* bitmap);
32			const BBitmap*		Bitmap() const
33									{ return fBitmap; }
34
35private:
36			BBitmap*			fBitmap;
37};
38
39
40// BColumn for PartitionListView which knows how to render
41// a BBitmapStringField
42class PartitionColumn : public BTitledColumn {
43	typedef BTitledColumn Inherited;
44public:
45								PartitionColumn(const char* title,
46									float width, float minWidth,
47									float maxWidth, uint32 truncateMode,
48									alignment align = B_ALIGN_LEFT);
49
50	virtual	void				DrawField(BField* field, BRect rect,
51									BView* parent);
52	virtual float				GetPreferredWidth(BField* field, BView* parent) const;
53
54	virtual	bool				AcceptsField(const BField* field) const;
55
56	static	void				InitTextMargin(BView* parent);
57
58private:
59			uint32				fTruncateMode;
60	static	float				sTextMargin;
61};
62
63
64// BRow for the PartitionListView
65class PartitionListRow : public BRow {
66	typedef BRow Inherited;
67public:
68								PartitionListRow(BPartition* partition);
69								PartitionListRow(partition_id parentID,
70									partition_id id, off_t offset, off_t size);
71
72			partition_id		ID() const
73									{ return fPartitionID; }
74			partition_id		ParentID() const
75									{ return fParentID; }
76			off_t				Offset() const
77									{ return fOffset; }
78			off_t				Size() const
79									{ return fSize; }
80
81			const char*			DevicePath();
82
83private:
84			partition_id		fPartitionID;
85			partition_id		fParentID;
86			off_t				fOffset;
87			off_t				fSize;
88};
89
90
91class PartitionListView : public BColumnListView {
92	typedef BColumnListView Inherited;
93public:
94								PartitionListView(const BRect& frame,
95									uint32 resizeMode);
96
97	virtual	void				AttachedToWindow();
98
99	virtual	bool				InitiateDrag(BPoint rowPoint, bool wasSelected);
100	virtual	void 				ExpandOrCollapse(BRow* row, bool expand);
101
102			PartitionListRow*	FindRow(partition_id id,
103									PartitionListRow* parent = NULL);
104			PartitionListRow*	AddPartition(BPartition* partition);
105			PartitionListRow*	AddSpace(partition_id parent,
106									partition_id id, off_t offset, off_t size);
107
108	virtual BSize				PreferredSize();
109
110private:
111			int32				_InsertIndexForOffset(PartitionListRow* parent,
112									off_t offset) const;
113};
114
115
116#endif // PARTITIONLIST_H
117