⛏️ index : haiku.git

/*
 * Copyright (C) 2010 Stephan Aßmus <superstippi@gmx.de>
 *
 * All rights reserved. Distributed under the terms of the MIT License.
 */
#ifndef TAB_VIEW_H
#define TAB_VIEW_H

#include <AbstractLayoutItem.h>
#include <Rect.h>
#include <String.h>


class BMessage;
class BView;
class TabContainerView;
class TabLayoutItem;


class TabView {
public:
								TabView();
	virtual						~TabView();

	virtual	BSize				MinSize();
	virtual	BSize				PreferredSize();
	virtual	BSize				MaxSize();

			void 				Draw(BRect updateRect);
	virtual	void				DrawBackground(BView* owner, BRect frame,
									const BRect& updateRect);
	virtual	void				DrawContents(BView* owner, BRect frame,
									const BRect& updateRect);

	virtual	void				MouseDown(BPoint where, uint32 buttons);
	virtual	void				MouseUp(BPoint where);
	virtual	void				MouseMoved(BPoint where, uint32 transit,
									const BMessage* dragMessage);

	virtual	void				Update();

			BLayoutItem*		LayoutItem() const;

			void				SetContainerView(TabContainerView* view);
			TabContainerView*	ContainerView() const;

			void				SetLabel(const char* label);
			const BString&		Label() const;

			BRect				Frame() const;

private:
			float				_LabelHeight() const;

private:
			TabContainerView*	fContainerView;
			TabLayoutItem*		fLayoutItem;

			BString				fLabel;
};


class TabLayoutItem : public BAbstractLayoutItem {
public:
								TabLayoutItem(TabView* parent);

	virtual	bool				IsVisible();
	virtual	void				SetVisible(bool visible);

	virtual	BRect				Frame();
	virtual	void				SetFrame(BRect frame);

	virtual	BView*				View();

	virtual	BSize				BaseMinSize();
	virtual	BSize				BaseMaxSize();
	virtual	BSize				BasePreferredSize();
	virtual	BAlignment			BaseAlignment();

			TabView*			Parent() const;
			void				InvalidateContainer();
			void				InvalidateContainer(BRect frame);
private:
			TabView*			fParent;
			BRect				fFrame;
			bool				fVisible;
};



#endif // TAB_VIEW_H