xref: /haiku/src/apps/drivesetup/PartitionList.h (revision be012e21222c4d8d70082d12353acb163dc60ba8)
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 
81 			const char*			DevicePath();
82 
83 private:
84 			partition_id		fPartitionID;
85 			partition_id		fParentID;
86 			off_t				fOffset;
87 			off_t				fSize;
88 };
89 
90 
91 class PartitionListView : public BColumnListView {
92 	typedef BColumnListView Inherited;
93 public:
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 
110 private:
111 			int32				_InsertIndexForOffset(PartitionListRow* parent,
112 									off_t offset) const;
113 };
114 
115 
116 #endif // PARTITIONLIST_H
117