BTRFS: Implement BTree::Path and change _Find.
[haiku.git] / docs / user / interface / ListView.dox
blobaadb688efd35bc0fa03ca4d7f261d868fe3429db
1 /*
2  * Copyright 2014 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *              John Scipione, jscipione@gmail.com
7  *
8  * Corresponds to:
9  *              headers/os/interface/ListView.h  hrev45555
10  *              src/kits/interface/ListView.cpp  hrev45555
11  */
14 /*!
15         \file ListView.h
16         \ingroup interface
17         \ingroup libbe
18         \brief ListView class definition.
22 /*!
23         \class BListView
24         \ingroup interface
25         \ingroup libbe
26         \brief Displays a list of items that the user can select and invoke.
28         BListView's can be one of two types set by the type parameter of the
29         constructor:
30         - \c B_SINGLE_SELECTION_LIST Can select only one item in the list at a
31              time. This is the default.
32         - \c B_MULTIPLE_SELECTION_LIST  Can select any number of items by
33              holding down Option for a discontinuous selection, or Shift for
34              a contiguous selection.
36         An example of a BListView looks like this:
37         \image html BListView_example.png
39         Click on an item to select it and double-click an item to invoke it. The
40         BListView doesn't define what it means to "invoke" an item. See
41         BListView::SetSelectionMessage() and BListView::SetInvocationMessage()
42         to set a message to be set when these actions occur. You can also select
43         and invoke items with keyboard keys such as the up and down arrow keys,
44         Page Up and Page Down and the Enter key or Space key to invoke the item.
46         This class is based on the BList class from the Support Kit and many of
47         the methods it uses behave similarly.
49         Although a BListView is scrollable, it doesn't provide scroll bars by
50         itself. You should add the BListView as a child of a BScrollView to make
51         it scrollable.
53         The code to add a BListView to a BScrollView looks something like this:
55 \code
56         BListView* list = new BListView(frame, "List", B_SINGLE_SELECTION_LIST);
57         list->AddItem(new BStringItem("Item 1"));
58         list->AddItem(new BStringItem("Item 2"));
59         ...
60         view->AddChild(new BScrollView("scroll_view", list,
61                 B_FOLLOW_LEFT | B_FOLLOW_TOP, 0, false, true));
62 \endcode
64         \see BScrollView for more information on scrolling views.
65         \see BList in the Support Kit.
66         \see BOutlineListView
67         \see BListItem
69         \since BeOS R3
73 /*!
74         \fn BListView::BListView(BRect frame, const char* name, list_view_type type,
75                 uint32 resizingMode, uint32 flags)
76         \brief Creates a new list view. This is the non-layout constructor.
78         \param frame The frame rectangle of the view.
79         \param name The name of the view.
80         \param type Whether the list view supports a single selection or multiple
81                selections.
82         \param resizingMode The resizing mode flags. See BView for details.
83         \param flags The view flags. See BView for details.
85         \since BeOS R3
89 /*!
90         \fn BListView::BListView(const char* name, list_view_type type,
91                 uint32 flags)
92         \brief Creates a new list view suitable as part of a layout with the
93                specified \a name, \a type, and \a flags.
95         \param name The name of the view.
96         \param type Whether the list view supports a single selection or multiple
97                selections.
98         \param flags The view flags. See BView for details.
100         \since Haiku R1
105         \fn BListView::BListView(list_view_type type)
106         \brief Creates a new list view suitable as part of a layout.
108         \param type Whether the list view supports a single selection or multiple
109                selections.
111         \since Haiku R1
116         \fn BListView::BListView(BMessage* archive)
117         \brief Creates a BListView object from the \a archive message.
119         \param archive The message to create the object from.
121         \since BeOS R3
126         \fn BListView::~BListView()
127         \brief Delete the BListView object and free the memory used by it.
129         This method does not free the attached list items.
131         \since BeOS R3
136         \name Archiving
140 //! @{
144         \fn BArchivable* BListView::Instantiate(BMessage* archive)
145         \brief Create a new BListView object from the message \a archive.
147         \copydetails BView::Instantiate()
152         \fn status_t BListView::Archive(BMessage* data, bool deep) const
153         \brief Archive the BListView object to a message.
155         \copydetails BView::Archive()
159 //! @}
163         \name Hook Methods
167 //! @{
171         \fn void BListView::Draw(BRect updateRect)
172         \brief Hook method called to draw the contents of the text view.
174         You should not have to call this method directly, use Invalidate() instead.
176         \param updateRect The rectangular area to draw.
178         \see BView::Draw()
180         \since BeOS R3
185         \fn void BListView::AttachedToWindow()
186         \brief Hook method called when the list view is added to the view hierarchy.
188         \copydetails BView::AttachedToWindow()
193         \fn void BListView::DetachedFromWindow()
194         \brief Hook method that is called when the list view is removed from the
195                view hierarchy.
197         \copydetails BView::DetachedFromWindow()
202         \fn void BListView::AllAttached()
203         \brief Hook method called once all views are attached to the view.
205         \copydetails BView::AllAttached()
210         \fn void BListView::AllDetached()
211         \brief Hook method called once all views are detached from the view.
213         \copydetails BView::AllDetached()
218         \fn void BListView::FrameResized(float newWidth, float newHeight)
219         \brief Hook method called when the list view is resized.
221         \copydetails BView::FrameResized()
226         \fn void BListView::FrameMoved(BPoint newPosition)
227         \brief Hook method called when the list view is moved.
229         \copydetails BView::FrameMoved()
234         \fn void BListView::TargetedByScrollView(BScrollView* view)
235         \brief Hook method called when the list view is attached to a BScrollView.
237         \param view The BScrollView the list view is attached to.
239         \since BeOS R3
244         \fn void BListView::WindowActivated(bool active)
245         \brief Hook method that is called when the window becomes the active window
246                or gives up that status.
248         \copydetails BView::WindowActivated()
253         \fn void BListView::MessageReceived(BMessage* message)
254         \brief Hook method called when a message is received by the list view.
256         \copydetails BView::MessageReceived()
261         \fn void BListView::KeyDown(const char* bytes, int32 numBytes)
262         \brief Hook method that is called when a key is pressed while the view is
263                the focus view of the active window.
265         The following keys are used by the list view by default:
266         - Up Arrow                              Selects the previous item.
267         - Down Arrow                    Selects the next item.
268         - Page Up                               Selects the item one view height above the
269                                 current item.
270         - Page Down                             Selects the item one view height below the
271                                 current item.
272         - Home                                  Selects the first item in the list.
273         - End                                   Select the last item in the list.
274         - Enter and Spacebar    Invokes the currently selected item.
276         \param bytes The \a bytes representing the keys pushed down.
277         \param numBytes The size of \a bytes.
279         \see BView::KeyDown()
281         \since BeOS R3
286         \fn void BListView::MouseDown(BPoint point)
287         \brief Hook method that is called when a mouse button is pushed down while
288                the cursor is contained in the view.
290         By default this method selects items on a single click, and invokes them on a
291         double click. This method calls InitiateDrag() to allow derived classes the
292         opportunity to drag and drop items from the list.
294         \param point The \a point where the mouse button was pushed down.
296         \see BView::MouseDown()
298         \since BeOS R3
303         \fn void BListView::MouseUp(BPoint where)
304         \brief Hook method that is called when a mouse button is released while
305                the cursor is contained in the view.
307         \param where The location that the mouse button was released.
309         \see BView::MouseUp()
311         \since BeOS R3
316         \fn void BListView::MouseMoved(BPoint where, uint32 code,
317                 const BMessage* dragMessage)
318         \brief Hook method that is called whenever the mouse cursor enters, exits
319                or moves inside the list view.
321         \param where The point where the mouse cursor has moved to.
322         \param code A code which indicating if the mouse entered or exited the view.
323         \param dragMessage A message containing drag and drop information.
325         \see BView::MouseMoved()
327         \since BeOS R3
332         \fn bool BListView::InitiateDrag(BPoint point, int32 index, bool wasSelected)
333         \brief Hook method called when a drag and drop operation is initiated.
335         This method is used by derived classes to implement drag and drop.
336         This method is called by the MouseDown() method. If the derived
337         class initiates the drag & drop operation you should return
338         \c true, otherwise return \c false. By default this method returns
339         \c false.
341         \param point Where the drag & drop operation started.
342         \param index
343         \param wasSelected Indicates whether or not the item was selected.
345         \returns \c true if a drag & drop operation was initiated, \c false
346                  otherwise.
348         \since BeOS R3
353         \fn void BListView::SelectionChanged()
354         \brief Hook method that is called when the selection changes.
356         This method should be implemented by derived classes, the default
357         implementation does nothing.
359         \since BeOS R3
363 //! @}
367         \name Resizing
371 //! @{
375         \fn void BListView::ResizeToPreferred()
376         \brief Resize the view to its preferred size.
378         \see BView::ResizeToPreferred()
380         \since BeOS R3
385         \fn void BListView::GetPreferredSize(float *_width, float *_height)
386         \brief Fill out the \a _width and \a _height parameters with the preferred
387                width and height of the list view.
389         \param _width The list view's preferred width is written to \a _width.
390         \param _height The list view's preferred height is written to \a _height.
392         \see BView::GetPreferredSize()
394         \since BeOS R3
399         \fn BSize BListView::MinSize()
400         \brief Returns the minimum size of the list view.
402         \return The minimum size of the list view as a BSize.
404         \see BView::MinSize()
406         \since Haiku R1
411         \fn BSize BListView::MaxSize()
412         \brief Returns the maximum size of the list view.
414         \return The maximum size of the list view as a BSize.
416         \see BView::MaxSize()
418         \since Haiku R1
423         \fn BSize BListView::PreferredSize()
424         \brief Returns the preferred size of the list view.
426         \return The preferred size of the list view as a BSize.
428         \see BView::PreferredSize()
430         \since Haiku R1
434 //! @}
438         \fn void BListView::MakeFocus(bool focused)
439         \brief Highlight or unhighlight the selection when the list view acquires
440                or loses its focus state.
442         \param focused \c true to receive focus or \c false to lose it.
444         \see BView::MakeFocus()
446         \since BeOS R3
451         \fn void BListView::SetFont(const BFont* font, uint32 mask)
452         \brief Sets the font of the list view to \a font with the font
453                parameters set by \a mask.
455         \param font The \a font to set the list view to.
456         \param mask A \a mask indicating which properties of \a font to set.
458         \see BView::SetFont()
460         \since BeOS R3
465         \fn void BListView::ScrollTo(BPoint point)
466         \brief Scroll the view to the specified \a point.
468         \param point The location to scroll the list view to.
470         \see BView::ScrollTo()
472         \since BeOS R3
477         \name Adding/Removing Items
481 //! @{
485         \fn bool BListView::AddItem(BListItem *item, int32 index)
486         \brief Add an \a item to the list view at the specified \a index.
488         \param item The list item to add.
489         \param index The \a index of where to add the list item, if not
490                specified the item is added to the end.
492         \return \c true if the list item was added, \c false otherwise.
494         \since BeOS R3
499         \fn bool BListView::AddList(BList* list, int32 index)
500         \brief Add a \a list of list items to the list view at the specified
501                \a index.
503         \param list The \a list of list items to add.
504         \param index The \a index of where to add the list, if not specified the
505                \a list is added to the end.
507         \return \c true if the \a list was added, \c false otherwise.
509         \since BeOS R3
514         \fn bool BListView::AddList(BList* list)
515         \brief Add a \a list of list items to the end of the list view.
517         \param list The \a list of list items to add.
519         \return \c true if the \a list was added, \c false otherwise.
521         \since BeOS R3
526         \fn BListItem* BListView::RemoveItem(int32 index)
527         \brief Remove the item at \a index from the list.
529         \param index The \a index of the item to remove.
531         \return \c true if the item was removed, \c false otherwise.
533         \since BeOS R3
538         \fn bool BListView::RemoveItem(BListItem* item)
539         \brief Remove the specified list item.
541         \param item The list item to remove.
543         \return \c true if the \a item was removed, \c false otherwise.
545         \since BeOS R3
550         \fn bool BListView::RemoveItems(int32 index, int32 count)
551         \brief Removes the items from \a index and the next \a count items.
553         \param index The location to start removing items from.
554         \param count The number of items past \a index to remove.
556         return \c true if the \a items were removed, \c false otherwise.
558         \since BeOS R3
562 //! @}
566         \name Selection and Invocation Message Methods
570 //! @{
574         \fn void BListView::SetSelectionMessage(BMessage* message)
575         \brief Sets the \a message that the list view sends when a new item
576                is selected.
578         \param message The selection \a message to set.
580         \since BeOS R3
585         \fn void BListView::SetInvocationMessage(BMessage* message)
586         Sets the \a message that the list view sends when an item is invoked.
588         \param message The invocation \a message to set.
590         \see BInvoker::SetMessage()
592         \since BeOS R3
597         \fn BMessage* BListView::InvocationMessage() const
598         \brief Returns the message that is send when an item is invoked.
600         \return The current invocation method as a BMessage.
602         \see BInvoker::Message()
604         \since BeOS R3
609         \fn uint32 BListView::InvocationCommand() const
610         \brief Returns the what parameter of the current invocation method.
612         \returns The what parameter of the currently set invocation method.
614         \see BInvoker::Command()
616         \since BeOS R3
621         \fn BMessage* BListView::SelectionMessage() const
622         \brief Returns the message that is send when an item is selected.
624         \return The current selection message as a BMessage.
626         \since BeOS R3
631         \fn uint32 BListView::SelectionCommand() const
632         \brief Returns the what parameter of the message that is send when an item is
633                selected.
635         \return The what parameter of the current selection message.
637         \since BeOS R3
641 //! @}
645         \name List Type Methods
649 //! @{
653         \fn void BListView::SetListType(list_view_type type)
654         \brief Sets the list view \a type.
657         \since BeOS R3
658         \param type The list view \a type to set.
663         \fn list_view_type BListView::ListType() const
664         \brief Returns the current list view type.
666         \return The list view type.
668         \since BeOS R3
672 //! @}
676         \name List Methods
680 //! @{
684         \fn BListItem* BListView::ItemAt(int32 index) const
685         \brief Returns the list item at the specified \a index.
687         \param index
689         \return The list item at the specified \a index.
691         \since BeOS R3
696         \fn int32 BListView::IndexOf(BListItem* item) const
697         \brief Returns the index of the specified \a item.
699         \param item The list item to get the index of.
701         \return The index of the specified \a item.
703         \since BeOS R3
708         \fn int32 BListView::IndexOf(BPoint point) const
709         \brief Returns the index of the item at the specified \a point.
711         \param point The location of the list item to get the index of.
713         \return The index of the list item at the specified \a point.
715         \since BeOS R3
720         \fn BListItem* BListView::FirstItem() const
721         \brief Returns a pointer to the first list item.
723         \return A pointer to the first item in the list or \c NULL there are no items.
725         \since BeOS R3
730         \fn BListItem* BListView::LastItem() const
731         \brief Returns a pointer to the last list item.
733         \return A pointer to the last item in the list or \c NULL there are no items.
735         \since BeOS R3
740         \fn bool BListView::HasItem(BListItem* item) const
741         \brief Returns whether or not the list contains the specified \a item.
743         \param item The list item to check.
745         \return \c true if \a item is in the list, \c false otherwise.
747         \since BeOS R3
752         \fn int32 BListView::CountItems() const
753         \brief Returns the number of items contained in the list view.
755         \return The number of items.
757         \since BeOS R3
762         \fn void BListView::MakeEmpty()
763         \brief Empties the list view of all items.
765         \since BeOS R3
770         \fn bool BListView::IsEmpty() const
771         \brief Returns whether or not the list view is empty.
773         \return \c true if the list view is empty, \c false otherwise.
775         \since BeOS R3
780         \fn void BListView::DoForEach(bool (*func)(BListItem* item))
781         \brief Calls the specified function on each item in the list.
783         The \a func is called on the items in order starting with the item at
784         index 0 and ending at the last item in the list. This method stops
785         calling the \a func once it returns \a true or the end of the list
786         is reached.
788         The first argument of \a func is a pointer to the list item.
790         \param func The function to call on each item.
792         \since BeOS R3
797         \fn void BListView::DoForEach(bool (*func)(BListItem* item, void* arg),
798                 void* arg)
799         \brief Calls the specified function on each item in the list.
801         The \a func is called on the items in order starting with the item at
802         index 0 and ending at the last item in the list. This method stops
803         calling the \a func once it returns \a true or the end of the list
804         is reached.
806         The first argument of \a func is a pointer to the list item, \a arg is
807         passed in as the second argument.
809         \param func The function to call on each item.
810         \param arg The second argument of the function.
812         \since BeOS R3
817         \fn const BListItem** BListView::Items() const
818         \brief Returns a pointer to the list of list items.
820         \returns a pointer to the list of list items.
822         \since BeOS R3
826 //! @}
830         \fn void BListView::InvalidateItem(int32 index)
831         \brief Draws the list item at the specified \a index.
833         \param index The \a index of the list item to draw.
835         \since Haiku R1
840         \name Selection
844 //! @{
848         \fn void BListView::ScrollToSelection()
849         \brief Scrolls to selected list item.
851         \since BeOS R3
856         \fn void BListView::Select(int32 index, bool extend)
857         \brief Selects the list item at the specified \a index.
859         \param index The \a index of the item to select.
860         \param extend Whether or not to also select child items.
862         \since BeOS R3
867         \fn void BListView::Select(int32 start, int32 finish, bool extend)
868         \brief Select items from \a start to \a finish.
870         \param start The index of the item to start the selection.
871         \param finish The index of the item to end the selection.
872         \param extend Whether or not to also select child items.
874         \since BeOS R3
879         \fn bool BListView::IsItemSelected(int32 index) const
880         \brief Returns whether or not the item at \a index is selected.
882         \return \c true if the item was selected, \c false otherwise.
884         \since BeOS R3
889         \fn int32 BListView::CurrentSelection(int32 index) const
890         \brief Returns the index of a currently selected item relative to the passed
891                in \a index.
893         If the index of the selected item is lower than \a index the value returned
894         is negative, if the index of the selected item is greater than \a index the
895         value returned is positive. If the index of the selected item is equal to
896         \a index then 0 is returned.
898         \param index The \a index of the item to get relative to the selected item's
899                index.
901         \since BeOS R3
905 //! @}
909         \fn status_t BListView::Invoke(BMessage* message)
910         \brief Invoke the list view, either with the current invocation message or
911                \a message if it is specified.
913         \param message The message to send or \c NULL to send the current invocation
914                message.
916         \see BControl::Invoke()
918         \since BeOS R3
923         \name Deselection
927 //! @{
931         \fn void BListView::DeselectAll()
932         \brief Deselect all items.
934         \since BeOS R3
939         \fn void BListView::DeselectExcept(int32 exceptFrom, int32 exceptTo)
940         \brief Deselect all items except the items with index in the range of
941                \a exceptFrom to \a exceptTo.
943         \param exceptFrom The index of the start of the exception list.
944         \param exceptTo The index of the end of the exception list.
946         \since BeOS R3
951         \fn void BListView::Deselect(int32 index)
952         \brief Deselect the item at \a index.
954         \param index The \a index of the item to deselect.
956         \since BeOS R3
960 //! @}
964         \fn void BListView::SortItems(int (*cmp)(const void *, const void *))
965         \brief Sort the items according the the passed in \a cmp function.
967         \param cmp The compare function to use to sort the items.
969         \since BeOS R3
974         \fn bool BListView::SwapItems(int32 a, int32 b)
975         \brief Swap item \a a with item \a b.
977         \param a The index of the first item to swap.
978         \param b The index of the second item to swap.
980         \return \c true if the items were swapped, \c false otherwise.
982         \since BeOS R3
987         \fn bool BListView::MoveItem(int32 from, int32 to)
988         \brief Move the item at index \a from to the position in the list at index \a to.
990         \param from The index of the item to move.
991         \param to The index to move the item to.
993         \return \c true if the item was moved, \c false otherwise.
995         \since BeOS R3
1000         \fn bool BListView::ReplaceItem(int32 index, BListItem* item)
1001         \brief Replace the item at index \a index with \a item.
1003         \param index The \a index of the item to replace.
1004         \param item The \a item to replace the item at \a index with.
1006         \return \c true if the item was replaced, \c false otherwise.
1008         \since BeOS R3
1013         \fn BRect BListView::ItemFrame(int32 index)
1014         \brief Return the frame of the item at the specified \a index.
1016         \param index The \a index of the item to get the frame of.
1018         \returns The frame of the item at \a index.
1020         \since BeOS R3
1025         \fn BHandler* BListView::ResolveSpecifier(BMessage* message, int32 index,
1026                 BMessage* specifier, int32 what, const char* property);
1027         \brief Determines the proper handler for the passed in scripting \a message.
1029         \copydetails BView::ResolveSpecifier()
1034         \fn status_t BListView::GetSupportedSuites(BMessage* data)
1035         \brief Reports the suites of messages and specifiers that derived classes
1036                 understand.
1038         \copydetails BView::GetSupportedSuites()
1043         \fn status_t BListView::Perform(perform_code code, void* _data)
1044         \brief Performs an action give a perform_code and data. (Internal Method)
1046         \copydetails BHandler::Perform()
1051         \fn bool BListView::DoMiscellaneous(MiscCode code, MiscData* data)
1052         \brief Do a miscellaneous action.
1054         \param code The action \a code to use.
1055                 - \c B_NO_OP: Do nothing
1056                 - \c B_REPLACE_OP: Replace the item in \a data
1057                 - \c B_MOVE_OP: Move the item in \a data.
1058                 - \c B_SWAP_OP: Swap the items in \a data.
1059         \param data The \a data to act on.
1061         \since Haiku R1