1/*
2 * Copyright 2006-2010, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef	_SPLIT_VIEW_H
6#define	_SPLIT_VIEW_H
7
8#include <View.h>
9
10class BSplitLayout;
11
12
13class BSplitView : public BView {
14public:
15								BSplitView(
16									enum orientation orientation
17										= B_HORIZONTAL,
18									float spacing = B_USE_DEFAULT_SPACING);
19								BSplitView(BMessage* from);
20	virtual						~BSplitView();
21
22			void				SetInsets(float left, float top, float right,
23									float bottom);
24			void				SetInsets(float horizontal, float vertical);
25			void				SetInsets(float insets);
26			void				GetInsets(float* left, float* top,
27									float* right, float* bottom) const;
28
29			float				Spacing() const;
30			void				SetSpacing(float spacing);
31
32			orientation			Orientation() const;
33			void				SetOrientation(enum orientation orientation);
34
35			float				SplitterSize() const;
36			void				SetSplitterSize(float size);
37
38			int32				CountItems() const;
39			float				ItemWeight(int32 index) const;
40			float				ItemWeight(BLayoutItem* item) const;
41			void				SetItemWeight(int32 index, float weight,
42									bool invalidateLayout);
43			void				SetItemWeight(BLayoutItem* item, float weight);
44
45			bool				IsCollapsible(int32 index) const;
46			void				SetCollapsible(bool collapsible);
47			void				SetCollapsible(int32 index, bool collapsible);
48			void				SetCollapsible(int32 first, int32 last,
49									bool collapsible);
50
51			bool				IsItemCollapsed(int32 index) const;
52			void				SetItemCollapsed(int32 index, bool collapsed);
53
54//			void				AddChild(BView* child);
55			void				AddChild(BView* child, BView* sibling = NULL);
56			bool				AddChild(BView* child, float weight);
57			bool				AddChild(int32 index, BView* child,
58									float weight);
59
60			bool				AddChild(BLayoutItem* child);
61			bool				AddChild(BLayoutItem* child, float weight);
62			bool				AddChild(int32 index, BLayoutItem* child,
63									float weight);
64
65	virtual	void				Draw(BRect updateRect);
66	virtual	void				DrawAfterChildren(BRect updateRect);
67	virtual	void				MouseDown(BPoint where);
68	virtual	void				MouseUp(BPoint where);
69	virtual	void				MouseMoved(BPoint where, uint32 transit,
70									const BMessage* message);
71
72	virtual	void				MessageReceived(BMessage* message);
73
74
75	virtual	void				SetLayout(BLayout* layout);
76									// overridden to avoid use
77
78	virtual status_t			Archive(BMessage* into, bool deep = true) const;
79	static	BArchivable*		Instantiate(BMessage* from);
80
81	virtual	status_t			Perform(perform_code d, void* arg);
82
83protected:
84	virtual	status_t			AllArchived(BMessage* into) const;
85	virtual status_t			AllUnarchived(const BMessage* from);
86
87	virtual	void				DrawSplitter(BRect frame,
88									const BRect& updateRect,
89									enum orientation orientation,
90									bool pressed);
91
92private:
93
94	// FBC padding
95	virtual	void				_ReservedSplitView1();
96	virtual	void				_ReservedSplitView2();
97	virtual	void				_ReservedSplitView3();
98	virtual	void				_ReservedSplitView4();
99	virtual	void				_ReservedSplitView5();
100	virtual	void				_ReservedSplitView6();
101	virtual	void				_ReservedSplitView7();
102	virtual	void				_ReservedSplitView8();
103	virtual	void				_ReservedSplitView9();
104	virtual	void				_ReservedSplitView10();
105
106	// forbidden methods
107								BSplitView(const BSplitView&);
108			void				operator =(const BSplitView&);
109
110	static	void				_DrawDefaultSplitter(BView* view, BRect frame,
111									const BRect& updateRect,
112									enum orientation orientation,
113									bool pressed);
114
115private:
116			BSplitLayout*		fSplitLayout;
117			uint32				_reserved[3];
118};
119
120
121#endif	// _SPLIT_VIEW_H
122