1/*
2 * Copyright 2006-2010, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef	_CARD_LAYOUT_H
6#define	_CARD_LAYOUT_H
7
8#include <AbstractLayout.h>
9
10
11class BCardLayout : public BAbstractLayout {
12public:
13								BCardLayout();
14								BCardLayout(BMessage* from);
15	virtual						~BCardLayout();
16
17			BLayoutItem*		VisibleItem() const;
18			int32				VisibleIndex() const;
19			void				SetVisibleItem(int32 index);
20			void				SetVisibleItem(BLayoutItem* item);
21
22	virtual	BSize				BaseMinSize();
23	virtual	BSize				BaseMaxSize();
24	virtual	BSize				BasePreferredSize();
25	virtual	BAlignment			BaseAlignment();
26
27	virtual	bool				HasHeightForWidth();
28	virtual	void				GetHeightForWidth(float width, float* min,
29									float* max, float* preferred);
30
31	virtual status_t			Archive(BMessage* into, bool deep = true) const;
32	static	BArchivable*		Instantiate(BMessage* from);
33
34	virtual	status_t			Perform(perform_code d, void* arg);
35
36protected:
37	virtual	status_t			AllArchived(BMessage* archive) const;
38	virtual status_t			AllUnarchived(const BMessage* from);
39
40	virtual status_t			ItemArchived(BMessage* into, BLayoutItem* item,
41									int32 index) const;
42	virtual	status_t			ItemUnarchived(const BMessage* from,
43									BLayoutItem* item, int32 index);
44
45	virtual	void				LayoutInvalidated(bool children = false);
46	virtual	void				DoLayout();
47	virtual	bool				ItemAdded(BLayoutItem* item, int32 atIndex);
48	virtual	void				ItemRemoved(BLayoutItem* item, int32 fromIndex);
49
50private:
51
52			void				_ValidateMinMax();
53
54	// FBC padding
55	virtual	void				_ReservedCardLayout1();
56	virtual	void				_ReservedCardLayout2();
57	virtual	void				_ReservedCardLayout3();
58	virtual	void				_ReservedCardLayout4();
59	virtual	void				_ReservedCardLayout5();
60	virtual	void				_ReservedCardLayout6();
61	virtual	void				_ReservedCardLayout7();
62	virtual	void				_ReservedCardLayout8();
63	virtual	void				_ReservedCardLayout9();
64	virtual	void				_ReservedCardLayout10();
65
66	// forbidden methods
67								BCardLayout(const BCardLayout&);
68			void				operator =(const BCardLayout&);
69
70			BSize				fMin;
71			BSize				fMax;
72			BSize				fPreferred;
73			BLayoutItem*		fVisibleItem;
74			bool				fMinMaxValid;
75
76			uint32				_reserved[5];
77};
78
79#endif	// _CARD_LAYOUT_H
80