xref: /haiku/headers/os/interface/OutlineListView.h (revision 7120e97489acbf17d86d3f33e3b2e68974fd4b23)
1 /*******************************************************************************
2 /
3 /	File:			OutlineListView.h
4 /
5 /   Description:    BOutlineListView represents a "nestable" list view.
6 /
7 /	Copyright 1997-98, Be Incorporated, All Rights Reserved
8 /
9 *******************************************************************************/
10 
11 #ifndef _OUTLINE_LIST_VIEW_H
12 #define _OUTLINE_LIST_VIEW_H
13 
14 #include <BeBuild.h>
15 #include <ListView.h>
16 
17 class BListItem;
18 
19 /*----------------------------------------------------------------*/
20 /*----- BOutlineListView class -----------------------------------*/
21 
22 class BOutlineListView : public BListView {
23 public:
24 					BOutlineListView(BRect frame,
25 							const char * name,
26 							list_view_type type = B_SINGLE_SELECTION_LIST,
27 							uint32 resizeMask = B_FOLLOW_LEFT | B_FOLLOW_TOP,
28 							uint32 flags = B_WILL_DRAW | B_FRAME_EVENTS
29 								| B_NAVIGABLE);
30 					BOutlineListView(BMessage *data);
31 virtual 			~BOutlineListView();
32 
33 static	BArchivable *Instantiate(BMessage *data);
34 virtual	status_t	Archive(BMessage *data, bool deep = true) const;
35 
36 virtual	void 		MouseDown(BPoint where);
37 virtual	void 		KeyDown(const char *bytes, int32 numBytes);
38 virtual	void		FrameMoved(BPoint new_position);
39 virtual	void		FrameResized(float new_width, float new_height);
40 virtual	void 		MouseUp(BPoint where);
41 
42 virtual bool 		AddUnder(BListItem *item, BListItem *underItem);
43 
44 virtual bool 		AddItem(BListItem *item);
45 virtual bool		AddItem(BListItem *item, int32 fullListIndex);
46 virtual bool		AddList(BList *newItems);
47 virtual bool		AddList(BList *newItems, int32 fullListIndex);
48 
49 virtual bool		RemoveItem(BListItem *item);
50 virtual BListItem	*RemoveItem(int32 fullListIndex);
51 virtual bool		RemoveItems(int32 fullListIndex, int32 count);
52 
53 
54 /* The following calls operator on the full outlinelist */
55 		BListItem	*FullListItemAt(int32 fullListIndex) const;
56 		int32		FullListIndexOf(BPoint point) const;
57 		int32		FullListIndexOf(BListItem *item) const;
58 		BListItem	*FullListFirstItem() const;
59 		BListItem	*FullListLastItem() const;
60 		bool		FullListHasItem(BListItem *item) const;
61 		int32		FullListCountItems() const;
62 		int32		FullListCurrentSelection(int32 index = 0) const;
63 virtual	void		MakeEmpty();
64 		bool		FullListIsEmpty() const;
65 		void		FullListDoForEach(bool (*func)(BListItem *));
66 		void		FullListDoForEach(bool (*func)(BListItem *, void *), void*);
67 
68 		BListItem	*Superitem(const BListItem *item);
69 
70 		void 		Expand(BListItem *item);
71 		void 		Collapse(BListItem *item);
72 
73 		bool		IsExpanded(int32 fullListIndex);
74 
75 virtual BHandler	*ResolveSpecifier(BMessage *msg,
76 										int32 index,
77 										BMessage *specifier,
78 										int32 form,
79 										const char *property);
80 virtual status_t	GetSupportedSuites(BMessage *data);
81 virtual status_t	Perform(perform_code d, void *arg);
82 
83 virtual void		ResizeToPreferred();
84 virtual void		GetPreferredSize(float *width, float *height);
85 virtual void		MakeFocus(bool state = true);
86 virtual void		AllAttached();
87 virtual void		AllDetached();
88 virtual void		DetachedFromWindow();
89 
90 
91 
92 		void		FullListSortItems(int (*compareFunc)(const BListItem *,
93 									const BListItem *));
94 		void		SortItemsUnder(BListItem *underItem,
95 									bool oneLevelOnly,
96 									int (*compareFunc)(const BListItem *,
97 														const BListItem*));
98 		int32		CountItemsUnder(BListItem *under, bool oneLevelOnly) const;
99 		BListItem 	*EachItemUnder(BListItem *underItem,
100 									bool oneLevelOnly,
101 									BListItem *(*eachFunc)(BListItem *, void *),
102 									void *);
103 		BListItem 	*ItemUnderAt(BListItem *underItem,
104 								bool oneLevelOnly,
105 								int32 index) const;
106 
107 protected:
108 
109 virtual	bool		DoMiscellaneous(MiscCode code, MiscData * data);
110 virtual void		MessageReceived(BMessage *);
111 
112 /*----- Private or reserved -----------------------------------------*/
113 private:
114 virtual	void		_ReservedOutlineListView1();
115 virtual	void		_ReservedOutlineListView2();
116 virtual	void		_ReservedOutlineListView3();
117 virtual	void		_ReservedOutlineListView4();
118 
119 typedef BListView	_inherited;
120 
121 		int32		FullListIndex(int32 index) const;
122 		int32		ListViewIndex(int32 index) const;
123 
124 #if !_PR3_COMPATIBLE_
125 protected:
126 #endif
127 virtual	void 		ExpandOrCollapse(BListItem *underItem, bool expand);
128 
129 private:
130 
131 virtual BRect		LatchRect(BRect itemRect, int32 level) const;
132 virtual void		DrawLatch(BRect itemRect, int32 level, bool collapsed,
133 						bool highlighted, bool misTracked);
134 virtual	void		DrawItem(BListItem *i, BRect cRect, bool complete = false);
135 
136 		BListItem	*RemoveCommon(int32 fullListIndex);
137 		BListItem	*RemoveOne(int32 fullListIndex);
138 
139 static	void 		TrackInLatchItem(void *);
140 static	void 		TrackOutLatchItem(void *);
141 
142 		bool		OutlineSwapItems(int32 a, int32 b);
143 		bool		OutlineMoveItem(int32 from, int32 to);
144 		bool		OutlineReplaceItem(int32 index, BListItem *item);
145 		void		CommonMoveItems(int32 from, int32 count, int32 to);
146 		BListItem	*SuperitemForIndex(int32 fullListIndex, int32 level);
147 		int32		FindPreviousVisibleIndex(int32 fullListIndex);
148 
149 		BList		fullList;
150 		uint32		_reserved[2];
151 };
152 
153 /*----------------------------------------------------------------*/
154 /*----------------------------------------------------------------*/
155 
156 #endif /* _OUTLINE_LIST_VIEW_H */
157