xref: /haiku/src/apps/drivesetup/PartitionList.h (revision b671e9bbdbd10268a042b4f4cc4317ccd03d105e)
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 
19 class 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)
24 class BBitmapStringField : public BStringField {
25 	typedef BStringField Inherited;
26 public:
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 
35 private:
36 			BBitmap*			fBitmap;
37 };
38 
39 
40 // BColumn for PartitionListView which knows how to render
41 // a BBitmapStringField
42 class PartitionColumn : public BTitledColumn {
43 	typedef BTitledColumn Inherited;
44 public:
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 
58 private:
59 			uint32				fTruncateMode;
60 	static	float				sTextMargin;
61 };
62 
63 
64 // BRow for the PartitionListView
65 class PartitionListRow : public BRow {
66 	typedef BRow Inherited;
67 public:
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 private:
81 			partition_id		fPartitionID;
82 			partition_id		fParentID;
83 			off_t				fOffset;
84 			off_t				fSize;
85 };
86 
87 
88 class PartitionListView : public BColumnListView {
89 	typedef BColumnListView Inherited;
90 public:
91 								PartitionListView(const BRect& frame,
92 									uint32 resizeMode);
93 
94 	virtual	void				AttachedToWindow();
95 
96 			PartitionListRow*	FindRow(partition_id id,
97 									PartitionListRow* parent = NULL);
98 			PartitionListRow*	AddPartition(BPartition* partition);
99 			PartitionListRow*	AddSpace(partition_id parent,
100 									partition_id id, off_t offset, off_t size);
101 
102 private:
103 			int32				_InsertIndexForOffset(PartitionListRow* parent,
104 									off_t offset) const;
105 };
106 
107 
108 #endif // PARTITIONLIST_H
109