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