1/*
2 * Copyright 2005-2015 Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _BOX_H
6#define _BOX_H
7
8
9#include <View.h>
10
11
12class BBox : public BView {
13	public:
14							BBox(BRect frame, const char* name = NULL,
15								uint32 resizingMode = B_FOLLOW_LEFT_TOP,
16								uint32 flags = B_WILL_DRAW | B_FRAME_EVENTS
17									| B_NAVIGABLE_JUMP,
18								border_style border = B_FANCY_BORDER);
19							BBox(const char* name,
20								uint32 flags = B_WILL_DRAW | B_FRAME_EVENTS
21									| B_NAVIGABLE_JUMP,
22								border_style border = B_FANCY_BORDER,
23								BView* child = NULL);
24							BBox(border_style border, BView* child);
25		virtual				~BBox();
26
27		/* Archiving */
28							BBox(BMessage* archive);
29		static BArchivable*	Instantiate(BMessage* archive);
30		virtual	status_t	Archive(BMessage* archive, bool deep = true) const;
31
32		virtual	void		SetBorder(border_style border);
33		border_style		Border() const;
34
35		float				TopBorderOffset();
36		BRect				InnerFrame();
37
38		void				SetLabel(const char* string);
39		status_t			SetLabel(BView* viewLabel);
40
41		const char*			Label() const;
42		BView*				LabelView() const;
43
44		virtual	void		Draw(BRect updateRect);
45		virtual	void		AttachedToWindow();
46		virtual	void		DetachedFromWindow();
47		virtual	void		AllAttached();
48		virtual	void		AllDetached();
49		virtual	void		FrameResized(float width, float height);
50		virtual	void		MessageReceived(BMessage* message);
51		virtual	void		MouseDown(BPoint point);
52		virtual	void		MouseUp(BPoint point);
53		virtual	void		WindowActivated(bool active);
54		virtual	void		MouseMoved(BPoint point, uint32 transit,
55								const BMessage* dragMessage);
56		virtual	void		FrameMoved(BPoint newLocation);
57
58		virtual	BHandler*	ResolveSpecifier(BMessage* message,
59								int32 index, BMessage* specifier,
60								int32 what, const char* property);
61
62		virtual	void		ResizeToPreferred();
63		virtual	void		GetPreferredSize(float* _width, float* _height);
64		virtual	void		MakeFocus(bool focused = true);
65		virtual	status_t	GetSupportedSuites(BMessage* message);
66
67		virtual	status_t	Perform(perform_code d, void* arg);
68
69		virtual	BSize		MinSize();
70		virtual	BSize		MaxSize();
71		virtual	BSize		PreferredSize();
72		virtual	BAlignment	LayoutAlignment();
73
74	protected:
75		virtual	void		LayoutInvalidated(bool descendants = false);
76		virtual	void		DoLayout();
77
78	private:
79		struct LayoutData;
80
81		virtual	void		_ReservedBox1();
82		virtual	void		_ReservedBox2();
83
84		BBox				&operator=(const BBox &);
85
86		void				_InitObject(BMessage* data = NULL);
87		void				_DrawPlain(BRect labelBox);
88		void				_DrawFancy(BRect labelBox);
89		void				_ClearLabel();
90
91		BView*				_Child() const;
92		void				_ValidateLayoutData();
93
94		char*				fLabel;
95		BRect				fBounds;
96		border_style		fStyle;
97		BView*				fLabelView;
98		LayoutData*			fLayoutData;
99};
100
101#endif	// _BOX_H
102