1/*
2 * Copyright 2007, Ingo Weinhold, bonefish@users.sf.net.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _PARTITION_DELEGATE_H
6#define _PARTITION_DELEGATE_H
7
8#include <DiskSystemAddOn.h>
9#include <MutablePartition.h>
10#include <Partition.h>
11
12
13class BDiskSystemAddOn;
14class BPartitionHandle;
15
16
17class BPartition::Delegate {
18public:
19								Delegate(BPartition* partition);
20								~Delegate();
21
22			BPartition*			Partition() const	{ return fPartition; }
23
24			BMutablePartition*	MutablePartition();
25			const BMutablePartition* MutablePartition() const;
26
27			status_t			InitHierarchy(
28									const user_partition_data* partitionData,
29									Delegate* parent);
30			status_t			InitAfterHierarchy();
31
32			const user_partition_data* PartitionData() const;
33
34			Delegate*			ChildAt(int32 index) const;
35			int32				CountChildren() const;
36
37			bool				IsModified() const;
38
39			uint32				SupportedOperations(uint32 mask);
40			uint32				SupportedChildOperations(Delegate* child,
41									uint32 mask);
42
43			// Self Modification
44
45			status_t			Defragment();
46			status_t			Repair(bool checkOnly);
47
48			status_t			ValidateResize(off_t* size) const;
49			status_t			ValidateResizeChild(Delegate* child,
50									off_t* size) const;
51			status_t			Resize(off_t size);
52			status_t			ResizeChild(Delegate* child, off_t size);
53
54			status_t			ValidateMove(off_t* offset) const;
55			status_t			ValidateMoveChild(Delegate* child,
56									off_t* offset) const;
57			status_t			Move(off_t offset);
58			status_t			MoveChild(Delegate* child, off_t offset);
59
60			status_t			ValidateSetContentName(BString* name) const;
61			status_t			ValidateSetName(Delegate* child,
62									BString* name) const;
63			status_t			SetContentName(const char* name);
64			status_t			SetName(Delegate* child, const char* name);
65
66			status_t			ValidateSetType(Delegate* child,
67									const char* type) const;
68			status_t			SetType(Delegate* child, const char* type);
69
70			status_t			SetContentParameters(const char* parameters);
71			status_t			SetParameters(Delegate* child,
72									const char* parameters);
73
74			status_t			GetParameterEditor(
75									B_PARAMETER_EDITOR_TYPE type,
76									BPartitionParameterEditor** editor) const;
77			status_t			GetNextSupportedChildType(Delegate* child,
78									int32* cookie, BString* type) const;
79			bool				IsSubSystem(Delegate* child,
80									const char* diskSystem) const;
81
82			bool				CanInitialize(const char* diskSystem) const;
83			status_t			ValidateInitialize(const char* diskSystem,
84									BString* name, const char* parameters);
85			status_t			Initialize(const char* diskSystem,
86									const char* name,
87									const char* parameters);
88			status_t			Uninitialize();
89
90			// Modification of child partitions
91
92			status_t			GetPartitioningInfo(BPartitioningInfo* info);
93
94			status_t			ValidateCreateChild(off_t* start, off_t* size,
95									const char* type, BString* name,
96									const char* parameters) const;
97			status_t			CreateChild(off_t start, off_t size,
98									const char* type, const char* name,
99									const char* parameters, BPartition** child);
100
101			status_t			DeleteChild(Delegate* child);
102
103private:
104			void				_FreeHandle();
105
106private:
107			BPartition*			fPartition;
108			BMutablePartition	fMutablePartition;
109			BDiskSystemAddOn*	fDiskSystem;
110			BPartitionHandle*	fPartitionHandle;
111};
112
113
114#endif	// _PARTITION_DELEGATE_H
115
116