2 * Copyright 2006-2015, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
5 #ifndef _OUTLINE_LIST_VIEW_H
6 #define _OUTLINE_LIST_VIEW_H
12 class BOutlineListView
: public BListView
{
14 BOutlineListView(BRect frame
, const char* name
,
16 = B_SINGLE_SELECTION_LIST
,
17 uint32 resizingMode
= B_FOLLOW_LEFT_TOP
,
18 uint32 flags
= B_WILL_DRAW
19 | B_FRAME_EVENTS
| B_NAVIGABLE
);
20 BOutlineListView(const char* name
,
22 = B_SINGLE_SELECTION_LIST
,
23 uint32 flags
= B_WILL_DRAW
24 | B_FRAME_EVENTS
| B_NAVIGABLE
);
25 BOutlineListView(BMessage
* archive
);
26 virtual ~BOutlineListView();
28 static BArchivable
* Instantiate(BMessage
* archive
);
29 virtual status_t
Archive(BMessage
* archive
,
30 bool deep
= true) const;
32 virtual void MouseDown(BPoint where
);
33 virtual void KeyDown(const char* bytes
, int32 numBytes
);
34 virtual void FrameMoved(BPoint newPosition
);
35 virtual void FrameResized(float newWidth
, float newHeight
);
36 virtual void MouseUp(BPoint where
);
38 virtual bool AddUnder(BListItem
* item
, BListItem
* superItem
);
40 virtual bool AddItem(BListItem
* item
);
41 virtual bool AddItem(BListItem
* item
, int32 fullListIndex
);
42 virtual bool AddList(BList
* newItems
);
43 virtual bool AddList(BList
* newItems
, int32 fullListIndex
);
45 virtual bool RemoveItem(BListItem
* item
);
46 virtual BListItem
* RemoveItem(int32 fullListIndex
);
47 virtual bool RemoveItems(int32 fullListIndex
, int32 count
);
49 BListItem
* FullListItemAt(int32 fullListIndex
) const;
50 int32
FullListIndexOf(BPoint where
) const;
51 int32
FullListIndexOf(BListItem
* item
) const;
52 BListItem
* FullListFirstItem() const;
53 BListItem
* FullListLastItem() const;
54 bool FullListHasItem(BListItem
* item
) const;
55 int32
FullListCountItems() const;
56 int32
FullListCurrentSelection(
57 int32 index
= 0) const;
59 virtual void MakeEmpty();
60 bool FullListIsEmpty() const;
61 void FullListDoForEach(bool (*func
)(BListItem
* item
));
62 void FullListDoForEach(bool (*func
)(BListItem
* item
, void* arg
),
65 BListItem
* Superitem(const BListItem
* item
);
67 void Expand(BListItem
* item
);
68 void Collapse(BListItem
* item
);
70 bool IsExpanded(int32 fullListIndex
);
72 virtual BHandler
* ResolveSpecifier(BMessage
* message
,
73 int32 index
, BMessage
* specifier
,
74 int32 what
, const char* property
);
75 virtual status_t
GetSupportedSuites(BMessage
* data
);
76 virtual status_t
Perform(perform_code code
, void* data
);
78 virtual void ResizeToPreferred();
79 virtual void GetPreferredSize(float* _width
,
81 virtual void MakeFocus(bool focus
= true);
82 virtual void AllAttached();
83 virtual void AllDetached();
84 virtual void DetachedFromWindow();
86 void FullListSortItems(int (*compareFunc
)(
87 const BListItem
* first
,
88 const BListItem
* second
));
89 void SortItemsUnder(BListItem
* superItem
,
90 bool oneLevelOnly
, int (*compareFunc
)(
91 const BListItem
* first
,
92 const BListItem
* second
));
93 int32
CountItemsUnder(BListItem
* superItem
,
94 bool oneLevelOnly
) const;
95 BListItem
* EachItemUnder(BListItem
* superItem
,
96 bool oneLevelOnly
, BListItem
* (*eachFunc
)(
97 BListItem
* item
, void* arg
),
99 BListItem
* ItemUnderAt(BListItem
* superItem
,
100 bool oneLevelOnly
, int32 index
) const;
103 virtual bool DoMiscellaneous(MiscCode code
, MiscData
* data
);
104 virtual void MessageReceived(BMessage
* message
);
107 virtual void _ReservedOutlineListView1();
108 virtual void _ReservedOutlineListView2();
109 virtual void _ReservedOutlineListView3();
110 virtual void _ReservedOutlineListView4();
113 virtual void ExpandOrCollapse(BListItem
* superItem
,
115 virtual BRect
LatchRect(BRect itemRect
, int32 level
) const;
116 virtual void DrawLatch(BRect itemRect
, int32 level
,
117 bool collapsed
, bool highlighted
,
119 virtual void DrawItem(BListItem
* item
, BRect itemRect
,
120 bool complete
= false);
123 int32
_FullListIndex(int32 index
) const;
125 void _PopulateTree(BList
* tree
, BList
& target
,
126 int32
& firstIndex
, bool onlyVisible
);
127 void _SortTree(BList
* tree
, bool oneLevelOnly
,
128 int (*compareFunc
)(const BListItem
* a
,
129 const BListItem
* b
));
130 void _DestructTree(BList
* tree
);
131 BList
* _BuildTree(BListItem
* superItem
, int32
& index
);
133 void _CullInvisibleItems(BList
&list
);
134 bool _SwapItems(int32 first
, int32 second
);
135 BListItem
* _RemoveItem(BListItem
* item
,
136 int32 fullListIndex
);
138 BListItem
* _SuperitemForIndex(int32 fullListIndex
,
139 int32 level
, int32
* _superIndex
= NULL
);
140 int32
_FindPreviousVisibleIndex(int32 fullListIndex
);
148 #endif // _OUTLINE_LIST_VIEW_H