1181638Skmacy/*
2181638Skmacy * Copyright 2006-2010, Haiku, Inc. All rights reserved.
3181638Skmacy * Distributed under the terms of the MIT License.
4181638Skmacy */
5181638Skmacy#ifndef _LIST_ITEM_H
6181638Skmacy#define _LIST_ITEM_H
7181638Skmacy
8181638Skmacy
9181638Skmacy#include <Archivable.h>
10181638Skmacy#include <Rect.h>
11181638Skmacy
12181638Skmacy
13181638Skmacyclass BFont;
14181638Skmacyclass BList;
15181638Skmacyclass BMessage;
16181638Skmacyclass BOutlineListView;
17181638Skmacyclass BView;
18181638Skmacy
19181638Skmacy
20181638Skmacyclass BListItem : public BArchivable {
21181638Skmacypublic:
22181638Skmacy								BListItem(uint32 outlineLevel = 0,
23181638Skmacy									bool expanded = true);
24181638Skmacy								BListItem(BMessage* archive);
25181638Skmacy	virtual						~BListItem();
26181638Skmacy
27181638Skmacy	virtual	status_t			Archive(BMessage* archive,
28181638Skmacy									bool deep = true) const;
29181638Skmacy
30181638Skmacy			float				Height() const;
31181638Skmacy			float				Width() const;
32181638Skmacy			bool				IsSelected() const;
33181638Skmacy			void				Select();
34181638Skmacy			void				Deselect();
35181638Skmacy
36181638Skmacy	virtual	void				SetEnabled(bool enabled);
37181638Skmacy			bool				IsEnabled() const;
38181638Skmacy
39181638Skmacy			void				SetHeight(float height);
40181638Skmacy			void				SetWidth(float width);
41181638Skmacy	virtual	void				DrawItem(BView* owner, BRect frame,
42181638Skmacy									bool complete = false) = 0;
43181638Skmacy	virtual	void				Update(BView* owner, const BFont* font);
44181638Skmacy
45181638Skmacy			bool				IsExpanded() const;
46181638Skmacy			void				SetExpanded(bool expanded);
47181638Skmacy			uint32				OutlineLevel() const;
48181638Skmacy			void				SetOutlineLevel(uint32 level);
49181638Skmacy
50181638Skmacy	virtual	status_t			Perform(perform_code code, void* arg);
51181638Skmacy
52181638Skmacyprivate:
53181638Skmacy	// FBC padding
54181638Skmacy	virtual	void				_ReservedListItem1();
55181638Skmacy	virtual	void				_ReservedListItem2();
56181638Skmacy
57181638Skmacy	// Forbidden
58181638Skmacy								BListItem(const BListItem& item);
59181638Skmacy			BListItem&			operator=(const BListItem& item);
60181638Skmacy
61181638Skmacyprivate:
62181638Skmacy	friend class BOutlineListView;
63181638Skmacy	friend class BListView;
64181638Skmacy
65181638Skmacy			bool				HasSubitems() const;
66181638Skmacy
67181638Skmacy			bool				IsItemVisible() const;
68181638Skmacy			void				SetItemVisible(bool visible);
69181638Skmacy	inline	float				Top() const;
70181638Skmacy	inline	float				Bottom() const;
71181638Skmacy			void				SetTop(float top);
72181638Skmacy
73181638Skmacyprivate:
74181638Skmacy			float				fTop;
75181638Skmacy			BList*				fTemporaryList;
76181638Skmacy			float				fWidth;
77181638Skmacy			float				fHeight;
78181638Skmacy			uint32				fLevel;
79181638Skmacy			bool				fSelected;
80181638Skmacy			bool				fEnabled;
81181638Skmacy			bool				fExpanded;
82181638Skmacy			bool				fHasSubitems : 1;
83181638Skmacy			bool				fVisible : 1;
84181638Skmacy};
85181638Skmacy
86181638Skmacy
87181638Skmacyinline float
88181638SkmacyBListItem::Top(void) const
89181638Skmacy{
90181638Skmacy	return fTop;
91181638Skmacy}
92181638Skmacy
93181638Skmacy
94181638Skmacyinline float
95181638SkmacyBListItem::Bottom(void) const
96181638Skmacy{
97181638Skmacy	return fTop + ceilf(fHeight) - 1.0;
98181638Skmacy}
99181638Skmacy
100181638Skmacy
101181638Skmacy#include <StringItem.h>
102181638Skmacy	// to maintain source compatibility
103181638Skmacy
104181638Skmacy
105181638Skmacy#endif // _LIST_ITEM_H
106181638Skmacy