1415ef601SStephan Aßmus /* 2415ef601SStephan Aßmus * Copyright 2006-2007, Haiku. All rights reserved. 3415ef601SStephan Aßmus * Distributed under the terms of the MIT License. 4415ef601SStephan Aßmus * 5415ef601SStephan Aßmus * Authors: 6415ef601SStephan Aßmus * Stephan Aßmus <superstippi@gmx.de> 7415ef601SStephan Aßmus */ 8415ef601SStephan Aßmus #ifndef LIST_VIEWS_H 9415ef601SStephan Aßmus #define LIST_VIEWS_H 10415ef601SStephan Aßmus 11415ef601SStephan Aßmus #include <ListItem.h> 12415ef601SStephan Aßmus #include <ListView.h> 13415ef601SStephan Aßmus #include <Message.h> 14415ef601SStephan Aßmus 15415ef601SStephan Aßmus enum { 16415ef601SStephan Aßmus FLAGS_NONE = 0x00, 17415ef601SStephan Aßmus FLAGS_TINTED_LINE = 0x01, 18415ef601SStephan Aßmus FLAGS_FOCUSED = 0x02, 19415ef601SStephan Aßmus }; 20415ef601SStephan Aßmus 21415ef601SStephan Aßmus // portion of the listviews height that triggers autoscrolling 22415ef601SStephan Aßmus // when the mouse is over it with a dragmessage 23415ef601SStephan Aßmus #define SCROLL_AREA 0.1 24415ef601SStephan Aßmus 25415ef601SStephan Aßmus class BMessageRunner; 26415ef601SStephan Aßmus class BMessageFilter; 27415ef601SStephan Aßmus class InterfaceWindow; 28415ef601SStephan Aßmus class BScrollView; 29415ef601SStephan Aßmus 30415ef601SStephan Aßmus // SimpleItem 31415ef601SStephan Aßmus class SimpleItem : public BStringItem { 32415ef601SStephan Aßmus public: 33415ef601SStephan Aßmus SimpleItem(const char* name); 34415ef601SStephan Aßmus virtual ~SimpleItem(); 35415ef601SStephan Aßmus 36415ef601SStephan Aßmus virtual void Draw(BView* owner, BRect frame, 37415ef601SStephan Aßmus uint32 flags); 38415ef601SStephan Aßmus virtual void DrawBackground(BView* owner, BRect frame, 39415ef601SStephan Aßmus uint32 flags); 40415ef601SStephan Aßmus }; 41415ef601SStephan Aßmus 42415ef601SStephan Aßmus // DragSortableListView 43415ef601SStephan Aßmus class DragSortableListView : public BListView { 44415ef601SStephan Aßmus public: 45415ef601SStephan Aßmus DragSortableListView(BRect frame, const char* name, 46415ef601SStephan Aßmus list_view_type type = B_SINGLE_SELECTION_LIST, 47415ef601SStephan Aßmus uint32 resizingMode = B_FOLLOW_LEFT 48415ef601SStephan Aßmus | B_FOLLOW_TOP, 49415ef601SStephan Aßmus uint32 flags = B_WILL_DRAW | B_NAVIGABLE 50415ef601SStephan Aßmus | B_FRAME_EVENTS); 51415ef601SStephan Aßmus virtual ~DragSortableListView(); 52415ef601SStephan Aßmus 53415ef601SStephan Aßmus // BListView interface 54415ef601SStephan Aßmus virtual void AttachedToWindow(); 55415ef601SStephan Aßmus virtual void DetachedFromWindow(); 56415ef601SStephan Aßmus virtual void FrameResized(float width, float height); 57415ef601SStephan Aßmus virtual void Draw(BRect updateRect); 58415ef601SStephan Aßmus virtual void ScrollTo(BPoint where); 59415ef601SStephan Aßmus virtual void TargetedByScrollView(BScrollView* scrollView); 60415ef601SStephan Aßmus virtual bool InitiateDrag(BPoint point, int32 index, 61415ef601SStephan Aßmus bool wasSelected); 62415ef601SStephan Aßmus virtual void MessageReceived(BMessage* message); 63415ef601SStephan Aßmus virtual void KeyDown(const char* bytes, int32 numBytes); 64415ef601SStephan Aßmus virtual void MouseDown(BPoint where); 65415ef601SStephan Aßmus virtual void MouseMoved(BPoint where, uint32 transit, 66415ef601SStephan Aßmus const BMessage* dragMessage); 67415ef601SStephan Aßmus virtual void MouseUp(BPoint where); 68415ef601SStephan Aßmus virtual void WindowActivated(bool active); 69415ef601SStephan Aßmus virtual void DrawItem(BListItem *item, BRect itemFrame, 70415ef601SStephan Aßmus bool complete = false); 71415ef601SStephan Aßmus 72415ef601SStephan Aßmus // DragSortableListView 73415ef601SStephan Aßmus virtual void SetDragCommand(uint32 command); 74415ef601SStephan Aßmus virtual void ModifiersChanged(); // called by window DoubleClicked(int32 index)75415ef601SStephan Aßmus virtual void DoubleClicked(int32 index) {} 76415ef601SStephan Aßmus 77415ef601SStephan Aßmus virtual void SetItemFocused(int32 index); 78415ef601SStephan Aßmus 79415ef601SStephan Aßmus virtual bool AcceptDragMessage(const BMessage* message) const; 80415ef601SStephan Aßmus virtual void SetDropTargetRect(const BMessage* message, 81415ef601SStephan Aßmus BPoint where); 82415ef601SStephan Aßmus 83415ef601SStephan Aßmus // autoscrolling 84415ef601SStephan Aßmus void SetAutoScrolling(bool enable); 85415ef601SStephan Aßmus bool DoesAutoScrolling() const; ScrollView()86415ef601SStephan Aßmus BScrollView* ScrollView() const 87415ef601SStephan Aßmus { return fScrollView; } 88415ef601SStephan Aßmus void ScrollTo(int32 index); 89415ef601SStephan Aßmus 90415ef601SStephan Aßmus bool MouseWheelChanged(float x, float y); 91415ef601SStephan Aßmus 92*bae0154cSStephan Aßmus virtual void MoveItems(const BList& indices, int32 toIndex); 93*bae0154cSStephan Aßmus virtual void CopyItems(const BList& indices, int32 toIndex); 94*bae0154cSStephan Aßmus virtual void RemoveItemList(const BList& indices); 95*bae0154cSStephan Aßmus 96*bae0154cSStephan Aßmus void GetSelectedItems(BList& indices); 97415ef601SStephan Aßmus void RemoveSelected(); // uses RemoveItemList() 98e9246c71SStephan Aßmus void RemoveAll(); // uses RemoveItemList() 99415ef601SStephan Aßmus int32 CountSelectedItems() const; 100415ef601SStephan Aßmus void SelectAll(); 101415ef601SStephan Aßmus virtual bool DeleteItem(int32 index); 102415ef601SStephan Aßmus 103415ef601SStephan Aßmus virtual BListItem* CloneItem(int32 atIndex) const = 0; 104415ef601SStephan Aßmus virtual void DrawListItem(BView* owner, int32 index, 105415ef601SStephan Aßmus BRect itemFrame) const = 0; 106415ef601SStephan Aßmus virtual void MakeDragMessage(BMessage* message) const = 0; 107415ef601SStephan Aßmus 108415ef601SStephan Aßmus private: 109415ef601SStephan Aßmus void _RemoveDropAnticipationRect(); 110415ef601SStephan Aßmus void _SetDragMessage(const BMessage* message); 111415ef601SStephan Aßmus 112415ef601SStephan Aßmus BRect fDropRect; 113415ef601SStephan Aßmus BMessage fDragMessageCopy; 114415ef601SStephan Aßmus BMessageRunner* fScrollPulse; 115415ef601SStephan Aßmus BPoint fLastMousePos; 116415ef601SStephan Aßmus 117415ef601SStephan Aßmus protected: 118415ef601SStephan Aßmus void _SetDropAnticipationRect(BRect r); 119415ef601SStephan Aßmus void _SetDropIndex(int32 index); 120415ef601SStephan Aßmus 121415ef601SStephan Aßmus int32 fDropIndex; 122415ef601SStephan Aßmus BListItem* fLastClickedItem; 123415ef601SStephan Aßmus BScrollView* fScrollView; 124415ef601SStephan Aßmus uint32 fDragCommand; 125415ef601SStephan Aßmus int32 fFocusedIndex; 126415ef601SStephan Aßmus }; 127415ef601SStephan Aßmus 128415ef601SStephan Aßmus // SimpleListView 129415ef601SStephan Aßmus class SimpleListView : public DragSortableListView { 130415ef601SStephan Aßmus public: 131415ef601SStephan Aßmus SimpleListView(BRect frame, 132415ef601SStephan Aßmus BMessage* selectionChangeMessage = NULL); 133415ef601SStephan Aßmus SimpleListView(BRect frame, const char* name, 134415ef601SStephan Aßmus BMessage* selectionChangeMessage = NULL, 135415ef601SStephan Aßmus list_view_type type = B_MULTIPLE_SELECTION_LIST, 136415ef601SStephan Aßmus uint32 resizingMode = B_FOLLOW_ALL_SIDES, 137415ef601SStephan Aßmus uint32 flags = B_WILL_DRAW | B_NAVIGABLE 138415ef601SStephan Aßmus | B_FRAME_EVENTS | B_FULL_UPDATE_ON_RESIZE); 139415ef601SStephan Aßmus ~SimpleListView(); 140415ef601SStephan Aßmus 141415ef601SStephan Aßmus // DragSortableListView interface 142415ef601SStephan Aßmus virtual void MessageReceived(BMessage* message); 143415ef601SStephan Aßmus virtual void SelectionChanged(); 144415ef601SStephan Aßmus 145415ef601SStephan Aßmus virtual BListItem* CloneItem(int32 atIndex) const; 146415ef601SStephan Aßmus virtual void DrawListItem(BView* owner, int32 index, 147415ef601SStephan Aßmus BRect itemFrame) const; 148415ef601SStephan Aßmus virtual void MakeDragMessage(BMessage* message) const; 149415ef601SStephan Aßmus 150415ef601SStephan Aßmus private: 151415ef601SStephan Aßmus 152415ef601SStephan Aßmus BMessage* fSelectionChangeMessage; 153415ef601SStephan Aßmus }; 154415ef601SStephan Aßmus 155415ef601SStephan Aßmus #endif // LIST_VIEWS_H 156