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