haiku/src/apps/drivesetup/PartitionList.h

117 lines
2.8 KiB
C++

/*
* Copyright 2006-2008 Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT license.
*
* Authors:
* Ithamar R. Adema <ithamar@unet.nl>
* James Urquhart
* Stephan Aßmus <superstippi@gmx.de>
*/
#ifndef PARTITIONLIST_H
#define PARTITIONLIST_H
#include <ColumnListView.h>
#include <ColumnTypes.h>
#include <Partition.h>
class BPartition;
// A field type displaying both a bitmap and a string so that the
// tree display looks nicer (both text and bitmap are indented)
class BBitmapStringField : public BStringField {
typedef BStringField Inherited;
public:
BBitmapStringField(BBitmap* bitmap,
const char* string);
virtual ~BBitmapStringField();
void SetBitmap(BBitmap* bitmap);
const BBitmap* Bitmap() const
{ return fBitmap; }
private:
BBitmap* fBitmap;
};
// BColumn for PartitionListView which knows how to render
// a BBitmapStringField
class PartitionColumn : public BTitledColumn {
typedef BTitledColumn Inherited;
public:
PartitionColumn(const char* title,
float width, float minWidth,
float maxWidth, uint32 truncateMode,
alignment align = B_ALIGN_LEFT);
virtual void DrawField(BField* field, BRect rect,
BView* parent);
virtual float GetPreferredWidth(BField* field, BView* parent) const;
virtual bool AcceptsField(const BField* field) const;
static void InitTextMargin(BView* parent);
private:
uint32 fTruncateMode;
static float sTextMargin;
};
// BRow for the PartitionListView
class PartitionListRow : public BRow {
typedef BRow Inherited;
public:
PartitionListRow(BPartition* partition);
PartitionListRow(partition_id parentID,
partition_id id, off_t offset, off_t size);
partition_id ID() const
{ return fPartitionID; }
partition_id ParentID() const
{ return fParentID; }
off_t Offset() const
{ return fOffset; }
off_t Size() const
{ return fSize; }
const char* DevicePath();
private:
partition_id fPartitionID;
partition_id fParentID;
off_t fOffset;
off_t fSize;
};
class PartitionListView : public BColumnListView {
typedef BColumnListView Inherited;
public:
PartitionListView(const BRect& frame,
uint32 resizeMode);
virtual void AttachedToWindow();
virtual bool InitiateDrag(BPoint rowPoint, bool wasSelected);
virtual void ExpandOrCollapse(BRow* row, bool expand);
PartitionListRow* FindRow(partition_id id,
PartitionListRow* parent = NULL);
PartitionListRow* AddPartition(BPartition* partition);
PartitionListRow* AddSpace(partition_id parent,
partition_id id, off_t offset, off_t size);
virtual BSize PreferredSize();
private:
int32 _InsertIndexForOffset(PartitionListRow* parent,
off_t offset) const;
};
#endif // PARTITIONLIST_H