2 * Copyright 2002-2015 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
19 B_SINGLE_SELECTION_LIST
,
20 B_MULTIPLE_SELECTION_LIST
24 class BListView
: public BView
, public BInvoker
{
26 BListView(BRect frame
, const char* name
,
28 = B_SINGLE_SELECTION_LIST
,
29 uint32 resizeMask
= B_FOLLOW_LEFT_TOP
,
30 uint32 flags
= B_WILL_DRAW
31 | B_FRAME_EVENTS
| B_NAVIGABLE
);
32 BListView(const char* name
,
34 = B_SINGLE_SELECTION_LIST
,
35 uint32 flags
= B_WILL_DRAW
36 | B_FRAME_EVENTS
| B_NAVIGABLE
);
37 BListView(list_view_type type
38 = B_SINGLE_SELECTION_LIST
);
39 BListView(BMessage
* data
);
43 static BArchivable
* Instantiate(BMessage
* data
);
44 virtual status_t
Archive(BMessage
* data
,
45 bool deep
= true) const;
47 virtual void Draw(BRect updateRect
);
49 virtual void AttachedToWindow();
50 virtual void DetachedFromWindow();
51 virtual void AllAttached();
52 virtual void AllDetached();
53 virtual void FrameResized(float newWidth
, float newHeight
);
54 virtual void FrameMoved(BPoint newPosition
);
55 virtual void TargetedByScrollView(BScrollView
* view
);
56 virtual void WindowActivated(bool active
);
58 virtual void MessageReceived(BMessage
* message
);
59 virtual void KeyDown(const char* bytes
, int32 numBytes
);
60 virtual void MouseDown(BPoint where
);
61 virtual void MouseUp(BPoint where
);
62 virtual void MouseMoved(BPoint where
, uint32 code
,
63 const BMessage
* dragMessage
);
65 virtual void ResizeToPreferred();
66 virtual void GetPreferredSize(float *_width
,
69 virtual BSize
MinSize();
70 virtual BSize
MaxSize();
71 virtual BSize
PreferredSize();
73 virtual void MakeFocus(bool state
= true);
75 virtual void SetFont(const BFont
* font
, uint32 mask
77 virtual void ScrollTo(BPoint where
);
78 inline void ScrollTo(float x
, float y
);
80 virtual bool AddItem(BListItem
* item
);
81 virtual bool AddItem(BListItem
* item
, int32 atIndex
);
82 virtual bool AddList(BList
* newItems
);
83 virtual bool AddList(BList
* newItems
, int32 atIndex
);
84 virtual bool RemoveItem(BListItem
* item
);
85 virtual BListItem
* RemoveItem(int32 index
);
86 virtual bool RemoveItems(int32 index
, int32 count
);
88 virtual void SetSelectionMessage(BMessage
* message
);
89 virtual void SetInvocationMessage(BMessage
* message
);
91 BMessage
* SelectionMessage() const;
92 uint32
SelectionCommand() const;
93 BMessage
* InvocationMessage() const;
94 uint32
InvocationCommand() const;
96 virtual void SetListType(list_view_type type
);
97 list_view_type
ListType() const;
99 BListItem
* ItemAt(int32 index
) const;
100 int32
IndexOf(BPoint point
) const;
101 int32
IndexOf(BListItem
* item
) const;
102 BListItem
* FirstItem() const;
103 BListItem
* LastItem() const;
104 bool HasItem(BListItem
* item
) const;
105 int32
CountItems() const;
106 virtual void MakeEmpty();
107 bool IsEmpty() const;
108 void DoForEach(bool (*func
)(BListItem
* item
));
109 void DoForEach(bool (*func
)(BListItem
* item
,
110 void* arg
), void* arg
);
111 const BListItem
** Items() const;
112 void InvalidateItem(int32 index
);
113 void ScrollToSelection();
115 void Select(int32 index
, bool extend
= false);
116 void Select(int32 from
, int32 to
,
117 bool extend
= false);
118 bool IsItemSelected(int32 index
) const;
119 int32
CurrentSelection(int32 index
= 0) const;
120 virtual status_t
Invoke(BMessage
* message
= NULL
);
123 void DeselectExcept(int32 exceptFrom
,
125 void Deselect(int32 index
);
127 virtual void SelectionChanged();
129 virtual bool InitiateDrag(BPoint where
, int32 index
,
132 void SortItems(int (*cmp
)(const void*,
135 // These functions bottleneck through DoMiscellaneous()
136 bool SwapItems(int32 a
, int32 b
);
137 bool MoveItem(int32 from
, int32 to
);
138 bool ReplaceItem(int32 index
, BListItem
* item
);
140 BRect
ItemFrame(int32 index
);
142 virtual BHandler
* ResolveSpecifier(BMessage
* message
,
143 int32 index
, BMessage
* specifier
,
144 int32 what
, const char* property
);
145 virtual status_t
GetSupportedSuites(BMessage
* data
);
147 virtual status_t
Perform(perform_code code
, void* arg
);
150 virtual void _ReservedListView2();
151 virtual void _ReservedListView3();
152 virtual void _ReservedListView4();
154 BListView
& operator=(const BListView
& other
);
157 enum MiscCode
{ B_NO_OP
, B_REPLACE_OP
, B_MOVE_OP
, B_SWAP_OP
};
159 struct Spare
{ int32 data
[5]; };
160 struct Replace
{ int32 index
; BListItem
*item
; } replace
;
161 struct Move
{ int32 from
; int32 to
; } move
;
162 struct Swap
{ int32 a
; int32 b
; } swap
;
165 virtual bool DoMiscellaneous(MiscCode code
, MiscData
* data
);
168 friend class BOutlineListView
;
170 void _InitObject(list_view_type type
);
171 void _FixupScrollBar();
172 void _InvalidateFrom(int32 index
);
173 status_t
_PostMessage(BMessage
* message
);
175 int32
_RangeCheck(int32 index
);
176 bool _Select(int32 index
, bool extend
);
177 bool _Select(int32 from
, int32 to
, bool extend
);
178 bool _Deselect(int32 index
);
179 bool _DeselectAll(int32 exceptFrom
, int32 exceptTo
);
180 int32
_CalcFirstSelected(int32 after
);
181 int32
_CalcLastSelected(int32 before
);
182 void _RecalcItemTops(int32 start
, int32 end
= -1);
184 virtual void DrawItem(BListItem
* item
, BRect itemRect
,
185 bool complete
= false);
187 bool _SwapItems(int32 a
, int32 b
);
188 bool _MoveItem(int32 from
, int32 to
);
189 bool _ReplaceItem(int32 index
, BListItem
* item
);
190 void _RescanSelection(int32 from
, int32 to
);
192 void _DoneTracking(BPoint where
);
193 void _Track(BPoint where
, uint32
);
197 list_view_type fListType
;
198 int32 fFirstSelected
;
201 BMessage
* fSelectMessage
;
202 BScrollView
* fScrollView
;
210 BListView::ScrollTo(float x
, float y
)
212 ScrollTo(BPoint(x
, y
));
215 #endif // _LIST_VIEW_H